使用循环连接参数以在shell脚本中形成命令

时间:2012-11-29 15:21:18

标签: shell loops arguments concatenation

我在这个网站和其他地方尝试了不同的建议,但没有任何效果。我需要将一些参数传递给shell脚本,然后将它们连接到一个字符串上,然后将其作为命令启动。所以我这样做

command="perl perl_script.pl"

for arg
do

command+="$arg "

done

eval $command

但是我收到了这个错误

bowtie_script_simple.sh: 43: bowtie_script_simple.sh: comando+=-n : not found
bowtie_script_simple.sh: 43: bowtie_script_simple.sh: comando+=3 : not found

根据我见过的其他线程应该可行。有什么想法吗?

由于

3 个答案:

答案 0 :(得分:2)

command="$command $arg"

你的args是否有(或可能有)空格?为了安全起见,你应该进一步引用。

答案 1 :(得分:2)

作为字符串连接在处理带空格的args时会带来困难。使用bash / zsh / ksh,使用数组效果更好:

command=(perl perl_script.pl)
for arg; do
    command+=("$arg")
done

# or more simply
# command=(perl perl_script.pl "$@")

# now, execute the command with each arg properly quoted. 
"${command[@]}"

从您的错误消息,看起来您正在使用/ bin / sh - 该shell没有var+=string构造 - 必须使用具有更多功能的shell。

答案 2 :(得分:1)

我认为这应该有效:

command="perl perl_script.pl"

for arg in $@
do
  command="$command $arg"
done

$command