web-dev-qa-db-ja.com

sh -c:終了しない引用符付き文字列エラー

私は次のエラーを理解しようと何時間も費やしました。

私のスクリプト

CMD="sh -c 'echo \"a\"'"
$CMD

エラー:

"a"': 1: "a"': Syntax error: Unterminated quoted string

もちろん私がやるときはecho $CMDと結果を貼り付けます。期待どおりに動作します...

エラーの原因は何ですか?

編集:

回避策だけでなく説明もお願いします。したがって、次のリンクは私の質問に答えていないと思います: 関数で引用するとエラーになります

4
klarezz

それはうまくいきません。シェルがWord分割を実行すると、4引数が得られます。

sh
-c
'echo
"a"'

これを行うには、bash配列を使用する必要があります。

cmd=( sh -c 'echo "a"' )
"${cmd[@]}"
4
glenn jackman

ここでの主なエラーは、'echo \"a\"'は、シェルによって実行される「単語分割」を停止し、echo "a"をshへの単一の引数として。

この場合、単一引用符は外側の二重引用符内に含まれているため、実際には「構文的」ではなく「リテラル」として扱われます。

次のリンクが最も役に立ちました: http://mywiki.wooledge.org/Arguments

1
klarezz