3

这是版本 2.1.0

$ set a foo
$ set b bar
$ echo $a_$b

$ echo {$a}_$b
foo_bar

为什么第一个“回声”什么也没输出?我本来希望看到“酒吧”

4

1 回答 1

5

首先要意识到下划线在标识符中是有效的,因此被扩展的变量不是$abut $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
于 2013-11-22T08:46:41.253 回答