Что на самом деле происходит с обратными ударами 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`", Но будь очень осторожен с этим.

Другие вопросы по тегам