수정해야 할 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[@]}"
답변2
따옴표는 단지 단어로 분리되는 것을 방지하기 위한 것입니다. 그런데 당신은 그 내용을 전부 인용했습니다.
export EXTRA_JAVA_OPTIONS="-javaagent:myagent.jar=-d 0 -i 1000 -l log2 -c log1"