Не противоречит ли поведение экранирования специальных символов внутри двойных кавычек в основных POSIX-совместимых оболочках с POSIX?

Укажите номер inode команде find и попросите ее выполнить команду stat для файла:

find . -inum #### -exec stat -c "%h" {} \;
0
10.01.2019, 04:47
2 ответа

В этом примечании содержится рекомендация удалить текст , если он считается особым .

Предлагаемый набор исправлений содержится в примечании :0000998 .

В примечании также сообщается, что изменение было одобрено 30 августа 2012 года.

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

Я думаю, вы могли бы забыть об этих словах.

2
28.01.2020, 02:41

Вecho "\abc\$\\"(например )входят два шага.

Во-первых, поскольку строковый аргумент для echoзаключен в двойные -кавычки, оболочка будет что-то делать с экранированными символами внутри.

В случае "\abc\$\\"он преобразует его в \abc$\перед передачей echo. \aостанется без изменений, поскольку aне является одним из «специальных» символов. Другие экранированные символы будут буквальными , что означает, что они больше не имеют особого значения в оболочке ($не запускает раскрытие, обратная косая черта не экранирует следующий символ и т. д. )Обратите внимание, что $в конце строки в двойных кавычках по-прежнему является "особым", так как могло бы ввести расширение, если бы строка не заканчивалась сразу после него. Две строки "a$"и "a\$"идентичны, так как $в первой строке ни к чему не применяется.

Затем echoможет выполнить собственную интерпретацию этого строкового аргумента. Некоторые реализации echoрассматривали бы \aкак означающее, например, "символ колокольчика".

Я также думаю, что здесь вы неправильно понимаете стандарт. Оценка обратной косой черты, за которой следует один из специальных символов, удалит обратную косую черту. Вы, кажется, думаете, что он должен оставаться неизменным и что, например. \$следует оставить как \$. Стандарт говорит напротив этого.

0
28.01.2020, 02:41

Теги

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