【问题标题】:Use multiple arguments stored in one variable in a command, in fish shell在命令中使用存储在一个变量中的多个参数,在鱼壳中
【发布时间】:2017-10-20 19:35:57
【问题描述】:

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

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

我希望上面的内容相当于

du -h -d 1    

但是,事实并非如此。结果报错:“du: 非法选项--”

如果我只是将 params 设置为 -h-d 1 但不能同时设置,它确实有效。

我发现的一种解决方法是这样做

eval du $params

但这似乎……错误,过分。有什么更清洁的方法吗?

【问题讨论】:

    标签: fish


    【解决方案1】:

    只需去掉引号。

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

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

    set params -h -d 1
    du $params
    

    【讨论】:

    • 我真正在做的是set param (cat /tmp/p) 当我从文件中读取参数时如何去掉引号。它们在文件中没有引号。
    • Fish 确实对命令替换(但不是变量扩展)执行拆分,但仅在换行符上。因此,要么明确拆分它(例如(string split " " < /tmp/p)),要么将文件更改为使用换行符 - 这也适用于 POSIX shell,因为它们也可以在换行符上拆分。
    • 是的,就是这样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多