【发布时间】:2013-11-22 03:24:26
【问题描述】:
这是 2.1.0 版
$ set a foo
$ set b bar
$ echo $a_$b
$ echo {$a}_$b
foo_bar
为什么第一个“echo”没有输出?我本来希望看到“酒吧”
【问题讨论】:
标签: fish
这是 2.1.0 版
$ set a foo
$ set b bar
$ echo $a_$b
$ echo {$a}_$b
foo_bar
为什么第一个“echo”没有输出?我本来希望看到“酒吧”
【问题讨论】:
标签: fish
首先要意识到下划线在标识符中是有效的,所以被扩展的变量不是$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
【讨论】: