シェルスクリプトで文字列を正しく連結する方法は?

シェルスクリプトで文字列を正しく連結する方法は?

修正する必要があるbashスクリプトがあります。変数を設定してから別のスクリプトを呼び出す必要があります。私の変数EXTRA_JAVA_OPTIONS

-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1"

だから私がしたことは

export EXTRA_JAVA_OPTIONS="-javaagent:myagent.jar=\"-d 0 -i 1000 -l log2 -c log1 \""

次に、スクリプト内に次の内容を含むスクリプトを呼び出します。

"$JAVACMD" "$EXTRA_JAVA_OPTIONS"

しかし、このようにしても、私が望む結果は出ません。 bash -xを実行するとわかります。

+ /usr/java/jdk1.6.0_38/bin/java '-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1"'

代わりに、次の操作を行います。

"$JAVACMD" $EXTRA_JAVA_OPTIONS

異なるバージョンの出力が表示されますが、これも間違っています。

+ /usr/java/jdk1.6.0_38/bin/java '-javaagent:myagent.jar="-d' 0 -i 1000 -l log2 -c 'log1"'

'文字列がシェルから印刷または追加されたときにこれが発生しないようにするにはどうすればよいですか?

ベストアンサー1

配列を使用することは、空白を含む引数をそのまま維持する安全な方法です。

EXTRA_JAVA_OPTIONS=(-javaagent:myagent.jar="-d 0 -i 1000 -l log2 -c log1")
"$JAVACMD" "${EXTRA_JAVA_OPTIONS[@]}"

おすすめ記事