Shell 在变量展开后添加文本-Fish

Shell 在变量展开后添加文本-Fish,shell,fish,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 看起来你想用花括号括起来,比如{$sarth}s。 例如: 编辑2:嗯。。。格伦·杰克曼示例中的额外鱼类扩张r.e.

我想在变量展开后添加文本,但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

看起来你想用花括号括起来,比如{$sarth}s。 例如:

编辑2:嗯。。。格伦·杰克曼示例中的额外鱼类扩张r.e.: 以这种方式排列,以便更容易地查看输出差异:

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 > 编辑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:

> 

看起来你想用花括号括起来,比如{$sarth}s。 例如:

编辑2:嗯。。。格伦·杰克曼示例中的额外鱼类扩张r.e.: 以这种方式排列,以便更容易地查看输出差异:

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 > 编辑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:

> 

哇,就是这样。谢谢你快速简单的回答,显然我不能在提问后15分钟内接受答案。。。今天学到了两个新东西:一个注释,这在引号中不起作用:设置foo-bar;埃科·莎士比亚是个{$foo}d;echo Shakespeare是一个{$foo}给你不同的输出。不用担心:-这是一个有趣的,我直到现在才听说过鱼-看起来很有趣。我想这会像bash风格;不管怎样,这也没什么大不了的。@glennjackman谢谢你指出这一点,我通过结束并重新引用变量来解决这个问题,即echo Shakespeare是一个$food。这很烦人,但你在鱼身上有点受不了了。命令替换也是如此;不要用引号括起来。@jgreve,这会更好:fish中的变量实际上是数组。设置foo-bar-baz-qux;埃科·莎士比亚是一个{$foo}dWow,就是这样。谢谢你快速简单的回答,显然我不能在提问后15分钟内接受答案。。。今天学到了两个新东西:一个注释,这在引号中不起作用:设置foo-bar;埃科·莎士比亚是个{$foo}d;echo Shakespeare是一个{$foo}给你不同的输出。不用担心:-这是一个有趣的,我直到现在才听说过鱼-看起来很有趣。我想这会像bash风格;不管怎样,这也没什么大不了的。@glennjackman谢谢你指出这一点,我通过结束并重新引用变量来解决这个问题,即echo Shakespeare是一个$food。这很烦人,但你在鱼身上有点受不了了。命令替换也是如此;不要用引号括起来。@jgreve,这会更好:fish中的变量实际上是数组。设置foo-bar-baz-qux;埃科·莎士比亚是个{$foo}d