在fish shell中,我希望能够将命令替换或变量扩展为另一个命令的多个参数,例如:
无需替代
ls -l -h
应该给出与以下相同的结果:
ls $(echo '-l -h')
第二个给出了错误:
ls: invalid option -- ' '
如果我这样做:
eval ls $(echo '-l -h')
它似乎满足了我的要求。
那么 2 个问题:
我读了这个问题和答案,与我的非常相似: fish 中的命令替换
但答案不适用于我的情况。
我的实际用例是遵循 gstreamer 的说明: https://gstreamer.freedesktop.org/documentation/installing/on-linux.html?gi-language=c#
它说要使用以下内容构建教程:
gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0`
当然,这在鱼中不起作用(因为反引号)。但是当转换为 $() 语法时,会出现错误:
gcc: error: unrecognized command-line option ‘-pthread -I/usr/include/gstreamer-1.0 -I/ ....
因为它已将 $() 块的输出解释为单个字符串——这很有意义并且看起来很合理,除了它阻止了这个非常合理的(imo)用例,而且我希望能够做到这在鱼里很舒服。
谢谢!
set var '-l -h'
set var_array (string split ' ' -- "$var")
ls $var_array