Это версия 2.1.0неожиданное отсутствие расширения переменной в моллюсках
$ set a foo
$ set b bar
$ echo $a_$b
$ echo {$a}_$b
foo_bar
Почему делает первый «эхо» на выходе ничего? Я бы ожидал увидеть «бар»
Это версия 2.1.0неожиданное отсутствие расширения переменной в моллюсках
$ set a foo
$ set b bar
$ echo $a_$b
$ echo {$a}_$b
foo_bar
Почему делает первый «эхо» на выходе ничего? Я бы ожидал увидеть «бар»
Первое, что нужно понять, это то, что подчеркивания действительны в идентификаторе, поэтому переменная, которая расширяется, не является $a
, а $a_
.
В настоящее время $a_
не установлен, что означает, что он обрабатывается как список нулевых записей. Некотируемая переменная подстановка работа за счетом расширения параметра отдельно для каждого элемента в списке, например:
> set a 1 2 3
> echo {$a}_x
1_x 2_x 3_x
В изначальном вопросе $a_
пуста. Параметр расширяется отдельно для каждого элемента в списке, который пуст, поэтому результат ничего не представляет. Вот почему он ничего не выводит.
Разделы с двойным кавычкой работают по-разному: записи списка объединяются пробелами, а затем расширены.
> set a 1 2 3
> echo "$a"_x
1 2 3_x
и это может вести себя, как вы ожидаете:
> set a foo
> set b bar
> echo "$a"_"$b"
foo_bar
> echo "$a_"$b
bar
Спасибо, большое объяснение. Я исхожу из bash, где все просто строки (если вы не набросаете на них много синтаксиса). Я должен привыкнуть к рыбе переменные - это списки, если они не защищены строками. –