Первый случай:
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.