Для команды:/usr/bin/sh-c "ls 1'" (одинарная левая кавычка после 1).
Как заставить его работать успешно? Добавление обратной косой черты прежде" '" не работает. 'специальный символ, как мы знаем, и я пытался окружить его одинарной кавычкой также (/usr/bin/sh-c "ls 1'' '"), но это не работает также.
Ошибка всегда:
% /usr/bin/sh -c "ls 1\`"
Unmatched `
Вам нужно экранировать обратный тик, но также экранировать обратный слеш:
$ 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 `.
Я настоятельно рекомендую вам избегать таких имен файлов в первую очередь.
Используйте вместо этого одинарные кавычки:
/usr/bin/sh -c 'ls 1\`'