像这样的 Bash(或其他 POSIX shell)命令在 fish 中该如何表达?
ls -l $(which vim) # or
ls -l `which vim`
答案1
答案2
从 Fish 版本 3.4.0 开始,命令替换现在可以使用任何一个 $()
或()
分组。例如:
ls -l $(which vim) # or
ls -l (which vim)
对于 3.4.0 之前的版本,仅表格()
可用。
反引号在 Bash 和其他 POSIX shell 中有效,但不能用作命令替换运算符。一般来说,反引号不再受到推崇的在任何 shell 中都可以实现此目的,但有些习惯(和旧文档)很难打破。
答案3
有时需要string split
在里面使用()
,否则-lgio-2.0 -lgobject-2.0 -lglib-2.0
编译器会错误地解释为“去查找名为的库gio-2.0 -lgobject-2.0 -lglib-2.0
,其中空格是其名称的一部分”。
引用官方教程
与其他 shell 不同,fish 不会根据任何空格(如空格或制表符)拆分命令替换,只会根据换行符拆分。对于
pkg-config
打印一行中多个参数的命令,这可能会造成问题。如果也要根据空格拆分,请使用string split
。> printf '%s\n' (pkg-config --libs gio-2.0) -lgio-2.0 -lgobject-2.0 -lglib-2.0 > printf '%s\n' (pkg-config --libs gio-2.0 | string split " ") -lgio-2.0 -lgobject-2.0 -lglib-2.0 ```