Первый случай:
echo $'$foo'
Какое эхо $foo
(имеется в виду, что первая $
в моей команде эха отброшена)
Первый $
запускается как команда. Эхо не требует пробелов между аргументами, оно просто принимает их.
Таким образом, эхо $'$foo'
расширяется для запуска команды $
(которая не является командой, поэтому игнорирует ее), а затем эхо '$foo'
. Все, что ''
входит в это, принимается за чистую монету - оно не расширяет его или что-либо еще Вы можете положить то, что вы хотите в '', и ничего не происходит.
Если заменить $
с $$
ним вторит идентификатор процесса.
Во-вторых:
echo $"$foo"
Это эхо pwd
(что означает, что bash расширяет $foo
свою переменную до значения)
Это потому ""
что не мешает расширению. ""
обычно используется, чтобы убедиться, что есть значение для сравнения.
Если у вас есть переменная, которая может быть пустой (например, из grep
результата), то вы хотите сравнить с другим значением / переменной, вы должны поместить первую переменную в ""
. Это гарантирует, что всегда есть сравнение для проверки, а не просто пустой фрагмент кода (как видит bash), который выдает ошибку.
Наконец, номер 3. Это интересно.
echo $`$foo`
Это эхо $~/scripts
(я ожидал, что это будет печатать, ~/scripts
а не $~/scripts
)
Это потому, что (в этом случае) echo $
сначала печатает символ. Помещение чего-либо в backticks приводит к тому, что значение переменной запускается как команда (лучший способ сделать это в более поздних версиях bash - это $(command)
)
Итак, сначала это эхо, $
затем оно расширяется `$foo`
до того, `pwd`
что запускается и возвращается ~/Scripts
. Но у нас был $
отпечаток ранее - так что весь вывод есть $~/Scripts
.