Читать книгу 📗 "UNIX — универсальная среда программирования - Керниган Брайан Уилсон"
Таблица 3.1: Метасимволы shell
При таком количестве метасимволов интерпретатора необходимо иметь возможность экранировать специальный символ от интерпретации. Самый простой и надежный способ экранирования — заключить его в апострофы:
$ echo '* * *'* * *$Можно также использовать кавычки
"..."$'...'"..."Еще одну возможность дает ввод обратной дробной черты перед каждым символом, который вы хотите закрыть от интерпретатора, например:
$ echo ***Хотя строка
***shellКавычки одного вида могут экранировать кавычки другого вида:
$ echo "Don't do that!"Don't do that!$и могут не заключать в себе весь аргумент:
$ echo x'*'yx*y$ echo '*'A'?'*А?$В последнем примере команда
echo$ echo 'hello> world'helloworld$Символ
>PS2Во всех приведенных выше примерах экранирование специальных символов предохраняет их от интерпретации. Команда
$ echo x*yвыдает все имена файлов, начинающиеся с
xyecho*shellЧто произойдет, если ни один файл не будет соответствовать шаблону? Интерпретатор просто пропустит строку, как если бы она была взята в кавычки, а не выразит вам свое неудовольствие (как было принято в ранних версиях). Конечно, не следует рассчитывать на это свойство, но его можно использовать, чтобы узнать о существовании файлов, соответствующих шаблону:
$ ls x*yx*y not found $ >xyzzy $ ls x*yxyzzy $ ls 'х*y'x*y not found $Появление обратной дробной черты в конце строки требует продолжения строки, что является способом задать интерпретатору очень длинную строку:
$ echo abc> def> ghiabcdefghi$Обратите внимание на то, что символ перевода строки отбрасывается, если перед ним стоит обратная дробная черта, но он остается, если взят в кавычки. Метасимвол
#shell#$ echo hello#therehello$ echo hello # therehello # there$Символ
#Объясните результат выполнения команды
$ ls .echoКоманда
echoecho$ правильное эхо введенная команда:Введенная команда: $Однако при таком решении в самой распространенной ситуации, когда перевод строки нужен, он не подразумевается по умолчанию и требует дополнительного ввода:
$ правильное эхо 'Привет!>'Привет!$Поскольку команда должна по умолчанию выполнять наиболее часто встречающееся действие, настоящее эхо автоматически добавляет перевод строки.
Но как быть, если это нежелательно? В седьмой версии системы команда
echo-n$ echo -n Enter a command:Enter a command: $ $ echo -- $Существует одна маленькая хитрость в случае получения эха от
-n