在命令中使用存储在一个变量中的多个参数,在 fish shell

Use multiple arguments stored in one variable in a command, in fish shell

我想将存储在变量中的一堆参数传递给 fish shell 脚本中的内置命令。例如,像这样:

set params "-h -d 1"
du $params

我希望上面的内容等同于

du -h -d 1    

但是,事实并非如此。它会导致错误:"du: illegal option --"

如果我只是将 params 设置为 -h-d 1 但不是两者都设置,它确实有效。

我发现的一种解决方法是

eval du $params

但这似乎...错了,过分了。有更清洁的方法吗?

只需删除引号。

在 POSIX shell(如 bash)中这样的东西起作用的原因是因为“word splitting”。当您使用不带引号的变量时,该值会被替换,然后沿着 IFS 变量中的字符拆分(通常是制表符、换行符和 space)。

在fish中,一开始就用数组来分隔元素。碰巧的是,唯一需要的更改是删除引号:

set params -h -d 1
du $params