下面是我的代码示例
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""
它不接受“ my value1”作为单个字符串。它以“ my”作为一个字符串,以“ value2”作为单独的字符串。
现在,如果我使用
command mycommand /path/location "$str"
然后$ str =“ arg1 =” my valu1“ arg2 =” my value2“”作为一个完整的字符串。 但是我希望命令可以通过程序方式以以下格式执行。
command mycommand /path/location arg1="my valu1" arg2="my value2"
该怎么做?
答案 0 :(得分:1)
不要尝试将参数附加到字符串中,只需将"$@"
传递到脚本中的实际命令即可:
command mycommand /path/location "$@"
答案 1 :(得分:0)
在支持数组(例如bash)的shell中,您将使用数组:
command mycommand /path/location "${arr[@]}"
如果您的外壳不支持数组,则可以使用位置参数:
command mycommand /path/location "${@}"
一个常见的技巧是使用set
重设位置参数。也就是说,您可以这样做:
set -- "arg one" "arg two"