Fish 命令替换参数——eval 安全吗?

问题描述 投票:0回答:1

在fish shell中,我希望能够将命令替换或变量扩展为另一个命令的多个参数,例如:

无需替代

ls -l -h

应该给出与以下相同的结果:

ls $(echo '-l -h')

第二个给出了错误:

ls: invalid option -- ' '

如果我这样做:

eval ls $(echo '-l -h')

它似乎满足了我的要求。

那么 2 个问题:

  1. 以这种方式使用 eval 实际上能够始终如一地完成我想要的事情吗?
  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)用例,而且我希望能够做到这在鱼里很舒服。

谢谢!

shell substitution fish
1个回答
0
投票
set var '-l -h'
set var_array (string split ' ' -- "$var")
ls $var_array
© www.soinside.com 2019 - 2024. All rights reserved.