Различие между $ '$foo' и $ “$foo”

Я испытываю затруднения при выяснении некоторых нюансы между одинарными и двойными кавычками в переменном контексте

Я определяю:

foo=pwd

затем выполнение они:

echo $'$foo'

Какой echos $foo (значение первого $ в моем эхе команда отбрасывается),

echo $"$foo"

Этот echos pwd (что означает, что удар расширяется $foo, моя переменная, к ее значению)

echo $`$foo`

Наконец этот echos $~/scripts (Я ожидал, что это распечатает ~/scripts и нет $~/scripts)

кто-то может помочь мне выяснить эти различия?

9
задан 18 February 2016 в 15:41

2 ответа

В конечном счете, последняя печать $~/scripts потому что $`foo` комбинация литерала $ сопровождаемый заменой команды; так продвижение $ интерпретируется как литерал $ и запаздывание `$foo` как замена команды.

11
ответ дан 18 February 2016 в 15:41

Первый случай:

echo $'$foo'

Какой echos $foo (значение первого $ в моем эхе команда отбрасывается),

Первое $ выполняется как команда. Эхо не требует пробелов между аргументами, оно просто берет их.

Так эхо $'$foo' расширяется для выполнения команды $ (который не является командой, таким образом, она игнорирует его), и затем отзовитесь эхом '$foo'. Что-либо в '' взят по номиналу - это не разворачивает его или ничто. Можно поместить то, что Вы хотите в, '' и ничего не происходит.

Если Вы заменяете $ с $$ это echos идентификатор процесса.


Во-вторых:

echo $"$foo"

Этот echos pwd (что означает, что удар расширяется $foo, моя переменная, к ее значению)

Поэтому "" не предотвращает его расширение. "" обычно используется, чтобы гарантировать, что существует значение для сравнения с.

Если у Вас есть переменная, которая могла бы быть пустой (например, это от a grep результат) затем Вы хотите выдержать сравнение с другим значением / переменная, необходимо вставить первую переменную "". Это гарантирует, что всегда существует сравнение с проверкой, а не просто пустой раздел кода (как удар видит), который дает ошибку.


Наконец, номер 3. Это интересно.

echo $`$foo`

Этот echos $~/scripts (Я ожидал, что это распечатает ~/scripts и нет $~/scripts)

Поэтому (в этом случае) эхо печатает $ символ сначала. Помещение чего-то в обратных галочках заставляет значение переменной быть выполненным как команда (лучший способ сделать, это в более поздних версиях удара $(command))

Таким образом, сначала это echos $ затем это расширяется ​`$foo`​ кому: ​`pwd`​ который выполняется и возвращается ~/Scripts. Но мы имели $ печать ранее - так целый вывод $~/Scripts.

2
ответ дан 19 February 2016 в 01:41
  • 1
    Я всегда предлагал бы поигравший в песочнице Windows virtuzalized (поле VMware / виртуальное поле) и никогда не доверял бы на вине – Rinzwind 17 May 2017 в 21:28

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

Похожие вопросы: