私は次のエラーを理解しようと何時間も費やしました。
私のスクリプト
CMD="sh -c 'echo \"a\"'"
$CMD
エラー:
"a"': 1: "a"': Syntax error: Unterminated quoted string
もちろん私がやるときはecho $CMD
と結果を貼り付けます。期待どおりに動作します...
エラーの原因は何ですか?
編集:
回避策だけでなく説明もお願いします。したがって、次のリンクは私の質問に答えていないと思います: 関数で引用するとエラーになります
それはうまくいきません。シェルがWord分割を実行すると、4引数が得られます。
sh
-c
'echo
"a"'
これを行うには、bash配列を使用する必要があります。
cmd=( sh -c 'echo "a"' )
"${cmd[@]}"
ここでの主なエラーは、'echo \"a\"'
は、シェルによって実行される「単語分割」を停止し、echo "a"
をshへの単一の引数として。
この場合、単一引用符は外側の二重引用符内に含まれているため、実際には「構文的」ではなく「リテラル」として扱われます。
次のリンクが最も役に立ちました: http://mywiki.wooledge.org/Arguments