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