Текст между обратными чертами выполняется и заменяется выводом команды (за исключением завершающих символов новой строки, и имейте в виду, что поведение оболочки меняется, когда в выводе присутствуют символы NUL). Это называется заменой команды, потому что она заменяется выводом команды. Поэтому, если вы хотите напечатать 5, вы не можете использовать обратные метки, вы можете использовать кавычки, например, echo "$b"
или просто отбросить любую цитату и использовать echo $b
.
Как вы можете видеть, поскольку $b
содержит 5, при использовании backticks bash
пытается выполнить команду 5
и, поскольку нет такой команды, он завершается с сообщением об ошибке.
Чтобы понять, как работают обратные пометки, попробуйте запустить это:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1
должен напечатать первую строку /etc/passwd
файла. Но так как мы используем обратные пометки, он не печатает это на консоли. Вместо этого он хранится в A
переменной. Вы можете повторить $A
это. Обратите внимание, что более эффективный способ печати первой строки - использование команды, head -n1 /etc/passwd
но я хотел отметить, что выражение внутри обратных кавычек не должно быть простым.
Так что если первая строка в / etc / passwd root:x:0:0:root:/root:/bin/bash
, первая команда будет динамически заменена на bash A="root:x:0:0:root:/root:/bin/bash"
.
Обратите внимание, что этот синтаксис имеет оболочку Bourne. Цитирование и экранирование быстро превращаются в кошмар, особенно когда вы начинаете их вкладывать. Ksh представил $(...)
альтернативу, которая теперь стандартизирована ( POSIX ) и поддерживается всеми оболочками (даже оболочкой Bourne из Unix v9). Таким образом, вы должны использовать $(...)
вместо этого в настоящее время, если вам не нужно быть переносимым на очень старые оболочки Борна.
Также обратите внимание, что выходные данные `...`
и $(...)
подвергаются разделению слов и генерации имени файла точно так же, как расширение переменных (в zsh, только разделение слов), поэтому обычно нужно заключать в кавычки в контекстах списка.