在外壳字符串中的字符串(A string within a string in shell)

2019-10-29 14:10发布

下面行是我的代码示例

command mycommand /path/location arg1="my valu1" arg2="my value2"

当我通过硬编码参数值执行此命令它的工作原理。

但是,当我使用下面的代码格式:

for i in "$@" do
str+="$i " 
done
command mycommand /path/location $str

where $str="arg1="my valu1" arg2="my value2""

它不接受“我值1”为一个字符串。 它以“我”作为一个字符串和“值2”作为一个单独的字符串。

现在,如果我用

command mycommand /path/location "$str"

然后$海峡=“ARG1 =”我valu1" ARG2 =‘我值2’”因为只有一个完整的字符串。 但我想命令应该通过计划的方式如下格式执行英寸

command mycommand /path/location arg1="my valu1" arg2="my value2"

这个怎么做?

Answer 1:

不要试图你的论点追加到一个字符串只是通过沿"$@"的脚本中的实际的命令:

command mycommand /path/location "$@"


Answer 2:

在支持阵列(例如,bash)的一个外壳,将使用的数组:

command mycommand /path/location "${arr[@]}"

如果你的shell不支持数组,您可以使用位置paramters:

command mycommand /path/location "${@}"

一个常见的黑客是使用set重置位置参数。 也就是说,你可以这样做:

set -- "arg one" "arg two"


文章来源: A string within a string in shell
标签: shell unix