全く理解できません。
コマンドライン(有効):
$ 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"
一重引用符と二重引用符の違いは、シェルが変数などを置き換えるかどうかです。