избегать использования символов в bash, что мы на самом деле избегаем? - PullRequest
0 голосов
/ 17 июня 2019

Я читаю руководство по bash, обнаружил, что escape-символ определение довольно удивительно, вместо изменение значение каждого символа следует за ним (как в Java / C):

сохраняет литеральное значение следующего символа, следующего за

Значит ли это в bash, мы используем его только для экранирования символа специального значения, такого как ', ", \, $

И другие случаи, например \ t \ e \ s \ t, на самом деле точно как тест? Я проверил, что

echo test

echo \t\e\s\t выводит тот же результат.

1 Ответ

1 голос
/ 17 июня 2019

Значит ли это в bash, мы используем его только для экранирования символов специального значения, таких как ', ", \, $

Да. Также, например, новая строка:

echo foo
bar
# foo
# -bash: bar: command not found

echo foo \
bar
# foo
# bar

И другие случаи, такие как \ t \ e \ s \ t, в действительности точно такие же, как и "test"

Если без кавычек да, в кавычках обратная косая черта сохраняется.Некоторые утилиты UNIX используют обратную косую черту для «особых значений», но именно эти утилиты, а не bash, дают значения этих последовательностей. Примерами являются printf и GNU echo, если задана опция -e:

/bin/echo \t\e\s\t
# test

/bin/echo "\t\e\s\t"
# \t\e\s\t

/bin/echo -e "\t\e\s\t"      # GNU version (will not do the same thing on Mac)
#         s       
# (tab)(escape)s(tab)

printf "\t\e\s\t"
#         s       
# (tab)(escape)s(tab)

Как напоминает @rici, bash может интерпретировать escape-последовательности в стиле C, если использовать специальные кавычки вида $'...':

/bin/echo $'\t\e\s\t'
#         s       

Вот это действительно bash, что делает это, а не echo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...