2016-06-19 9 views
2

次のコードが引用された配列をエコー

myopts=(--url="http://www.lemonde.fr" --out="hello world" --out-format="png") 
echo "going to execute following command: cutycapt ${myopts[@]}" 
# commented out because this way you do not have to have cutycapt to test 
# cutycapt "${myopts[@]}" 

は、次のように出力します

going to execute following command: cutycapt --url=http://www.lemonde.fr --out=hello world --out-format=png 

が、本当に何が実行されることはされています。したがって、それはどのような私です

cutycapt --url="http://www.lemonde.fr" --out="hello world" --out-format="png" 

echoコマンドから出力したいと考えています。

答えて

2

あなたは(私たちはprintfから最後まで\n自動的に1を追加doens't追加)

printf '%q ' cutycapt "${myopts[@]}"; printf '\n' 

のように、引数の引用されたバージョンを印刷する%qフォーマット文字列でprintfを使用することができます

例:

$ myopts=(--url="http://www.lemonde.fr" --out="hello world" --out-format="png") 
$ printf 'going to execute following command: '; printf '%q ' cutycapt "${myopts[@]}"; printf '\n' 
going to execute following command: cutycapt --url=http://www.lemonde.fr --out=hello\ world --out-format=png 

hello world

なぜこのようにしたいのかに応じて、set -xを有効にして実行しているだけであると考えましたか?そのため、拡張コマンドラインは実行される前に表示されますか?

$ set -x 
$ cutycapt "${myopts[@]}" 
+ cutycapt --url=http://www.lemonde.fr '--out=hello world' --out-format=png 
3

あなたの配列を作成すると、その要素は引用符で囲まれます。あなたがそれらを維持したい場合は、それらを追加する必要があり、既に引用した:

$ myopts=(--url="http://www.lemonde.fr" --out="hello world" --out-format="png") 
$ (IFS=$'\n'; echo "${myopts[*]}") 
--url=http://www.lemonde.fr 
--out=hello world 
--out-format=png 

$ myopts=('--url="http://www.lemonde.fr"' '--out="hello world"' '--out-format="png"') 
$ echo "going to execute following command: cutycapt ${myopts[@]}" 
going to execute following command: cutycapt --url="http://www.lemonde.fr" --out="hello world" --out-format="png" 

をあなたはmyoptsを作成した後、あなたの配列要素を見れば、あなたは彼らがすでに引用符が欠落していることがわかります

これを削除する展開ではなく、割り当て時には–が発生します。

+0

私があなたの 'myopts'を使うと、' cutycapt $ {myopts [@]} 'コマンドは動作しません。重複を減らしたいので、2つの別々の「myopts」を持つことは望ましくありません。 –

+0

@XuWangどのように実際に呼び出すのですか? 'cutycapt" $ {myopts [@]} "'(引用符に気づく)? –

+0

はい私はそれをどのように呼び出すかは引用符で申し訳ありません。それは私にとってはうまくいかない。 –

関連する問題