【问题标题】:Shell script: Surround variable with quotes when passing into an array?Shell脚本:传入数组时用引号包围变量?
【发布时间】:2019-10-16 00:03:59
【问题描述】:

我有一个 shell 脚本,其中一部分是这样做的:

bundle exec rake parallel[${@:3}];

${@:3} 是动态的,可能类似于 -p thread11 THREAD=test_thread11,或者只是 @test.feature

rake 任务需要一个参数,但无论我尝试什么,我都无法让 shell 脚本用引号将变量括起来,而不是发送类似的东西

bundle exec rake parallel["-p thread11 THREAD=test_thread11"]

我最终发送了

bundle exec rake parallel[-p thread11 THREAD=test_thread11]

这会导致 rake 任务失败。

使用 echo 语句,我可以通过执行得到正确的输出

echo "将使用运行命令" bundle exec rake parallel["'${@:3}'"]

是否可以在将变量的值传递给任务时用引号括起来?

【问题讨论】:

    标签: shell sh rake-task


    【解决方案1】:

    您似乎想改用 "${*:3}",这将从 3 个参数中生成一个以空格分隔的单词,而不是一系列单个单词,每个参数一个。

    【讨论】:

    • 谢谢!好像是这样,你能告诉我那个符号叫什么吗?我是 shell 脚本的新手,所以我会继续阅读。
    • @* 是两个不同的特殊参数(在手册页中搜索该术语)。 $* 表现得更“正常”,而 $@ 在引用时具有特殊行为(因此不应在不带引号的情况下使用,并且很少在较大的引用字符串中使用)。
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 2019-07-06
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2020-10-02
    • 1970-01-01
    相关资源
    最近更新 更多