Что на самом деле происходит с обратными ударами bash?
Я всегда думал о обратных галочках в bash как "выполнить вывод 'some_command'
"Что происходит в следующем... рассмотрим сценарий myscript.pl
который печатает следующий текст:
export PS1 = "[STRING] $ PS1"
Если я скопирую вывод из cat file.txt
в командной строке и выполните "[STRING] " добавляется в начало моей подсказки.
С другой стороны, отступление 'myscript.pl'
заставляет меня подсказать "[STRING]
, Что происходит?
1 ответ
bash
не выполняет вывод команды backtick, только подставляет ее. (Функция называется подстановка команд в конце концов.)
Если подстановка не заключена в двойные кавычки, для вывода команды выполняется разделение слов, но кавычки и другие специальные символы игнорируются; export PS1="[STRING] $PS1"
просто делится на $IFS
чтобы:
export
PS1="[STRING
$PS1"
Если вы хотите выполнить содержимое файла, поставьте его:
,./file.txt
или не POSIX:
источник./file.txt
Если вы хотите, чтобы все стандартные разборы применялись к подстановке - например, к переменной - вы можете использовать eval "$commands"
или же eval "$(foo)"
или же eval "`foo`"
, Но будь очень осторожен с этим.