变量扩展后添加文本 - 鱼

时间:2015-12-08 20:32:15

标签: shell fish

我想在变量扩展后添加文本,但是fish认为我指的是一个不同的变量名称,例如。

$ set dessert "cake"
$ echo $dessert
cake
$ echo "I want 7 $desserts"
I want 7 
$ cat ./menu.txt | sed "s/$desserts/cookie/g"
sed: first RE may not be empty

1 个答案:

答案 0 :(得分:4)

看起来你想把大括号放在你的vaiable周围,比如" {$ dessert} s。" 例如:

> set xyz blarch
> echo $xyz
blarch
> echo ${xyz}
Variables cannot be bracketed. In fish, please use {$xyz}.
fish: echo ${xyz}
            ^
> echo {$xyz}
blarch
> echo i like {$xyz}s
i like blarchs
> 

编辑2:嗯...奖金鱼扩张r.e. @glenn jackman的例子: 以这种方式安排以更容易地看到输出差异:

        example fish command                     ::    result
-------------------------------------------------::------------------------
> set foo bar; echo shakespere was a {$foo}      :: shakespere was a bar
> set foo bar; echo shakespere was a {$foo}d     :: shakespere was a bard
> set foo bar; echo "shakespere was a {$foo}d"   :: shakespere was a {bar}d
> set foo bar; echo "shakespere was a {"$foo"}d" :: shakespere was a {bar}d
> set foo bar; echo "shakespere was a "{$foo}"d" :: shakespere was a bard
> set foo bar; echo "shakespere was a "$foo"d"   :: shakespere was a bard
> 

似乎最后一个效率最高。

编辑:我想说的是,与其他shell相比,Fish与var扩展有点不同,比如bash。请注意行为,{$ xyz}不会失败,但它的工作方式与Fish相同......而{}被视为处理了{}&#39>文字在那里,它产生" {moreblarch}"像这样:

bash示例:

$ export xyz=moreblarch
$ echo $xyz
moreblarch
$ echo {$xyz}
{moreblarch}
$ echo ${xyz}
moreblarch
$ echo who doesnt like ${xyz}s?
who doesnt like moreblarchs?
$ 

编辑3:根据@ glennjackman的数组注释进行鱼类排列 这不是我所期望的:-)" echo -e"将\ n解释为换行符,使其更容易查看输出。请注意,排列在它们之间插入了一个空格(这就是#2 - #27具有前导空格的原因)。

> set a A B C; set b 1 2 3; set c x y z; echo -e ":a="$a" b="$b" c="$c":\n"
:a=A b=1 c=x:
 :a=B b=1 c=x:
 :a=C b=1 c=x:
 :a=A b=2 c=x:
 :a=B b=2 c=x:
 :a=C b=2 c=x:
 :a=A b=3 c=x:
 :a=B b=3 c=x:
 :a=C b=3 c=x:
 :a=A b=1 c=y:
 :a=B b=1 c=y:
 :a=C b=1 c=y:
 :a=A b=2 c=y:
 :a=B b=2 c=y:
 :a=C b=2 c=y:
 :a=A b=3 c=y:
 :a=B b=3 c=y:
 :a=C b=3 c=y:
 :a=A b=1 c=z:
 :a=B b=1 c=z:
 :a=C b=1 c=z:
 :a=A b=2 c=z:
 :a=B b=2 c=z:
 :a=C b=2 c=z:
 :a=A b=3 c=z:
 :a=B b=3 c=z:
 :a=C b=3 c=z:

> 
相关问题