我想在鱼壳脚本中将存储在变量中的一堆参数传递给内置命令。例如,像这样:
set params "-h -d 1"
du $params
Run Code Online (Sandbox Code Playgroud)
我希望以上内容等同于
du -h -d 1
Run Code Online (Sandbox Code Playgroud)
但是,事实并非如此。结果为错误:“ du:非法选项-”
如果我只是设置params为-h或设置为,-d 1但不能同时设置两者,则它确实可以工作。
我发现的一种解决方法是
eval du $params
Run Code Online (Sandbox Code Playgroud)
但这似乎...错误,过度。有没有更清洁的方法?
只需删除引号。
之所以在POSIX shell(如bash)中起作用,是因为“ 单词拆分 ”。使用无引号的变量时,将替换该值,然后将其沿IFS变量中的字符(通常为制表符,换行符和空格)分割。
在鱼中,首先使用数组将元素分开。碰巧的是,唯一需要做的更改就是删除引号:
set params -h -d 1
du $params
Run Code Online (Sandbox Code Playgroud)