Выйдите из одинарной левой кавычки в дважды заключенной в кавычки строке в оболочке

Для команды:/usr/bin/sh-c "ls 1'" (одинарная левая кавычка после 1).

Как заставить его работать успешно? Добавление обратной косой черты прежде" '" не работает. 'специальный символ, как мы знаем, и я пытался окружить его одинарной кавычкой также (/usr/bin/sh-c "ls 1'' '"), но это не работает также.

Ошибка всегда:

% /usr/bin/sh -c "ls 1\`"
Unmatched `
30
задан 22 February 2010 в 10:31
поделиться

3 ответа

Вам нужно экранировать обратный тик, но также экранировать обратный слеш:

$ touch 1\`
$ /bin/sh -c "ls 1\\\`"
1`

Причина, по которой вам нужно экранировать его "дважды", заключается в том, что вы вводите эту команду в среде (например, в сценарии оболочки), которая интерпретирует строку с двойными кавычками один раз. Затем она снова интерпретируется подпрограммой.

Вы также можете избежать двойных кавычек, и таким образом избежать первой интерпретации:

$ /bin/sh -c 'ls 1\`'
1`

Другой способ - хранить имя файла в переменной, и использовать это значение:

$ export F='1`'
$ printenv F
1`
$ /bin/sh -c 'ls $F'  # note that /bin/sh interprets $F, not my current shell
1`

И, наконец, то, что вы попробовали, будет работать в некоторых оболочках (я использую bash, как в вышеприведенных примерах), но, очевидно, не в вашей оболочке:

$ /bin/sh -c "ls 1'\`'"
1`
$ csh  # enter csh, the next line is executed in that environment
% /bin/sh -c "ls 1'\`'"
Unmatched `.

Я настоятельно рекомендую вам избегать таких имен файлов в первую очередь.

48
ответ дан 27 November 2019 в 23:55
поделиться

Используйте вместо этого одинарные кавычки:

/usr/bin/sh -c 'ls 1\`'
4
ответ дан 27 November 2019 в 23:55
поделиться
 /usr/bin/sh -c "ls '1\`'"
0
ответ дан 27 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: