1

この Web サイトや他の場所でさまざまな提案を試みましたが、何も機能しませんでした。いくつかの引数をシェル スクリプトに渡し、それらを文字列に連結してコマンドとして起動する必要があります。だから私はこれをします

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

文字列として連結すると、スペースを含む引数を処理するときに問題が発生します。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 に答える
2
command="$command $arg"

あなたの引数には空白がありますか(またはある可能性がありますか)?安全のために、おそらくさらに引用する必要があります。

于 2012-11-29T15:24:50.613 に答える
1

私はこれがうまくいくと思います:

command="perl perl_script.pl"

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

$command
于 2012-11-29T15:35:30.090 に答える