1

我在这个网站和其他地方尝试了不同的建议,但没有任何效果。我需要将一些参数传递给 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

根据我看到的其他线程应该可以工作。有任何想法吗?

谢谢

4

3 回答 3

2
command="$command $arg"

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

于 2012-11-29T15:24:50.613 回答
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 ——该外壳没有var+=string构造——必须使用具有更多功能的外壳。

于 2012-11-29T16:12:24.823 回答
1

我认为这应该有效:

command="perl perl_script.pl"

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

$command
于 2012-11-29T15:35:30.090 回答