쉘 스크립트에서 문자열을 올바르게 연결하는 방법은 무엇입니까?

쉘 스크립트에서 문자열을 올바르게 연결하는 방법은 무엇입니까?

수정해야 할 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"

관련 정보