Fish中等价于bash $(command) 表示法的符号是什么?

64
我目前正在使用fish shell而非bash shell。我遇到的一个符号使用问题是$(command),类似于这个SOF post中所描述的。在fish shell中应该如何编写这个命令呢?请注意,我可以在要执行的命令周围使用反斜杠字符,但是链接的post和其他post不建议这样做,因为这是一种旧的命令求值方式。
具体来说,这是我想将其转换成fish shell语法的bash命令(用于在shell启动时初始化rbenv):
eval "$(rbenv init -)"

4
根据fish FAQ中的这个条目,子命令用括号括起来表示。例如,set foo (echo bar); echo $foo输出bar - iscfrc
4个回答

86
在fish shell中,$只用于变量。Bash中$(command)的正确注释等效写法在fish shell中是(command)

7
请执行以下命令:eval (docker-machine env default --no-proxy --shell=fish)。谢谢您的帮助。 - Leo Cavalcante

17

顺便提一下:如果你还需要将其用在字符串中:

echo "Found "(count $PATH)" paths in PATH env var"

所以暂时关闭引号并在之后重新打开是无法避免的。https://fishshell.com/docs/current/tutorial.html#command-substitutions - aasutossh

8

自从fish 3.4版本(于2022年3月发布),支持$()替换语法。它的用法与()替换语法相同,但可以在双引号字符串内使用。


我想使用 alias math=math ()",这样我就可以默认使用括号进行计算。这可行吗? - Pranav
@Pranav 请提出新问题,这样有更好的机会得到答案 :) - ash

0
小心鱼中的()$()与bash中的$()并不完全等同。
鱼仅在换行符上分割命令替换。
在鱼中,cmd $(echo "A B C")等同于cmd 'A B C',但是在bash中, cmd $(echo "A B C")等同于cmd A B C
但是cmd $(echo -e "A\nB\nC")在鱼和bash中确实是等同的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接