![두 가지 유형의 변수는 어떻게 다르게 동작합니까?[닫기]](https://linux55.com/image/133309/%EB%91%90%20%EA%B0%80%EC%A7%80%20%EC%9C%A0%ED%98%95%EC%9D%98%20%EB%B3%80%EC%88%98%EB%8A%94%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%8B%A4%EB%A5%B4%EA%B2%8C%20%EB%8F%99%EC%9E%91%ED%95%A9%EB%8B%88%EA%B9%8C%3F%5B%EB%8B%AB%EA%B8%B0%5D.png)
.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
두 번째 호출에서는 다른 값을 갖는 것 같습니다.