.jar
いくつかのオプションを使用してファイルを実行するbashスクリプトを作成しました。驚いたことに、別の方法で変数を使用すると、異なる動作が発生することがわかりました。
使用法1:
JAR_FILE="my_jar_file.jar"
JAVA_OPTS="-mx4096M"
GC_OPTS="-XX:+UseG1GC"
echo "java "$GC_OPTS" "$JAVA_OPTS" -jar "$JAR_FILE
java $GC_OPTS $JAVA_OPTS -jar $JAR_FILE
実行方法は次のとおりです。
java -XX:+UseG1GC -mx4096M -jar my_jar_file.jar
使用法2:
JAR_FILE="my_jar_file.jar"
JAVA_OPTS="-mx4096M"
GC_OPTS="-XX:+UseG1GC"
echo "java "${GC_OPTS}" "${JAVA_OPTS}" -jar "${JAR_FILE}
java ${GC_OPTS} ${JAVA_OPTS} -jar ${JAR_FILE}
実行方法は次のとおりです。
java -XX:+UseG1GC -Xmx3072m -XX:MaxPermSize=1024m -Djava.net.preferIPv4Stack=true -jar my_jar_file.jar
これらの中間オプションはどこから来ましたか?
編集する:
私は間違いを。途中で、以前は気付かなかったJavaビルドステップがあります。ビルドは変数を置き換えており、違いがあります。したがって、@Kusalanandaが言ったように、${VAR}
これと使用法に違いはありません$VAR
。
私は新しい質問をし、Javaの専門家に変数置換がなぜこのように機能するのか尋ねなければならないと思いました。
答え1
これが実際にMakefileや他のものではなくシェルスクリプトにあると仮定すると...
$variable
間のシェルにはまったく違いはありません${variable}
。それらは交換可能です。
${variable}
文字列の一部に展開し、直後の文字が変数名の一部として有効な文字である場合(これは使用できます)"${variable}A"
。
したがって、使用法は${variable}
あなたが見る違いを説明しません。
確かなことは、JAVA_OPTS
2番目の呼び出しでは異なる値を持つようです。