두 가지 유형의 변수는 어떻게 다르게 동작합니까?[닫기]

두 가지 유형의 변수는 어떻게 다르게 동작합니까?[닫기]

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

관련 정보