意外缺乏鱼壳的可变膨胀

时间:2013-11-22 03:24:27

标签: fish

这是版本2.1.0

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

$ echo {$a}_$b
foo_bar

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

1 个答案:

答案 0 :(得分:4)

要实现的第一件事是下划线在标识符中有效,因此扩展的变量不是$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