这是版本 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
but $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