【问题标题】:unexpected lack of variable expansion in fish shell鱼壳中意外缺乏变量膨胀
【发布时间】: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


    【解决方案1】:

    首先要意识到下划线在标识符中是有效的,所以被扩展的变量不是$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
    

    【讨论】:

    • 谢谢你,很好的解释。我来自 bash,那里的东西只是字符串(除非你向它们抛出大量语法)。我必须习惯于钓鱼变量是列表,除非用字符串保护。
    猜你喜欢
    • 2012-12-09
    • 2015-08-22
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2020-01-22
    • 2019-04-27
    • 2016-11-23
    相关资源
    最近更新 更多