shスクリプトで引用された文字列パラメータを渡す

shスクリプトで引用された文字列パラメータを渡す

全く理解できません。

コマンドライン(有効):

$ someprog -flag 'key1=val 1,key2=val 2,key3=val 3'

sh直接(効果的に):

#!/bin/sh
someprog -flag 'key1=val 1,key2=val 2,key3=val 3'

sh変数(失敗):

#!/bin/sh
OPTSTR="'key1=val 1,key2=val 2,key3=val 3'"
someprog -flag "$OPTSTR"      #fails
someprog -flag ${OPTSTR}      #fails
someprog -flag $OPTSTR        #fails
eval "someprog -flag $OPTSTR" #works

ベストアンサー1

最初の2つの例では、彼の主張を引用しました。これらの引用符は、文字列全体をスペースに分割するのではなく、単一の引数として扱うシェルでのみ表示されます。プログラムは引用符自体を見ることができません。

OPTSTR="'key1=val 1,key2=val 2,key3=val 3'"変数の内容を入力するときに一重引用符を含めると、後でプログラムで使用できます。あなたのプログラムは引用符を見ますが、それを期待していないので失敗します。

ちょうど使用:

OPTSTR="key1=val 1,key2=val 2,key3=val 3"
someprog -flag "$OPTSTR"

一重引用符と二重引用符の違いは、シェルが変数などを置き換えるかどうかです。

おすすめ記事