这是2.1.0版本。
$ set a foo
$ set b bar
$ echo $a_$b
$ echo {$a}_$b
foo_bar
为什么第一个 "echo" 没有输出任何内容?我本来期望看到 "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