.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
두 번째 호출에서는 다른 값을 갖는 것 같습니다.