LINUX.ORG.RU

[bash] Присвоение результатов команды переменной

 


0

1

Теоретический вопрос. Пример скрипта:

var=".."
var=$(echo -e "$var" | sed -e 's/\./\\\./g') # замена "." на "\."
var=`echo -e "$var" | sed -e 's/\./\\\./g'` # замена "." на "\."
echo $var

Чем отличается присвоение в обратных кавычках
от присвоения с помощью синтаксиса вида $(команда)?
В книгах, которые я видел, об этом сказано вскользь и непонятно
(хотя, может, я просто проглядел).
Можете словесно объяснить?

man bash

Подстановка результатов выполнения команд

Подстановка результатов выполнения команд позволяет результат, выдаваемый командой в стандартный выходной поток, подставить вместо имени команды. Имеется две формы такой подстановки:

$(команда)

или

`команда`

Командный интерпретатор bash делает эту подстановку путем выполнения команды и замены конструкции подстановки содержимым стандартного выходного потока команды, из которого удалены завершающие переводы строк. Встроенные переводы строк не удаляются, но они могут быть удалены при разбиении на слова. Подстановку результатов выполнения команды $(cat file) можно заменить эквивалентной, но более быстрой: $(< file).

При использовании старой формы подстановки в обратных апострофах обратная косая интерпретируется как литерал, если только после нее не идут символы $, ` или \. Первый же обратный апостроф, не замаскированный обратной косой, завершает подставляемую команду. При использовании формы $(команда) все символы между круглыми скобками образуют команду - ни один не имеет специального значения.

Подстановка результатов выполнения команд может быть вложенной. Для задания вложенной подстановки в форме с обратными апострофами замаскируйте внутренние обратные апострофы обратными косыми.

Если подстановка задана в двойных кавычках, разбиение на слова и подстановка имен файлов в результатах не выполняется.

dGhost ★★★
()
Ответ на: комментарий от dGhost

Спасибо, но это не совсем понятно.
Если обратная косая
"интерпретируется как литерал, если только
после нее не идут символы $, ` или \",
то в моём примере в стартовом посте два способа должны работать
по-разному, а они работают одинаково.
Ведь там просто каша из обратных слешей.

The_gray_Cardinal
() автор топика
Ответ на: комментарий от borisych

>> почувствуйте разницу...

Такой пример демонстрирует скорее полную идентичность методов,
а не разницу.
Если добавить червёртую строку, то демонстрирация идентичности полная:

echo `echo 1`echo 1`echo 1`
echo $(echo 1)echo 1$(echo 1)
echo $(echo 1$(echo 1)echo 1)
echo `echo 1\`echo 1\`echo 1`

The_gray_Cardinal
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.