하나의 bash 스크립트에서 다른 bash 스크립트로 큰따옴표가 포함된 매개변수 전달

하나의 bash 스크립트에서 다른 bash 스크립트로 큰따옴표가 포함된 매개변수 전달

Bash 스크립트는 다음과 같이 호출됩니다.

$./script 25 "str1 str2"

위와 정확히 동일한(따옴표 포함) 두 개의 인수를 받는 다른 스크립트를 실행하는 터미널을 시작해야 합니다. 나는 이것을 시도했습니다 :

lxterminal --command=$"./script2 "$"$@"

그러나 이것은 따옴표를 생략한 것으로 보이므로 호출은 ./script2 25 str1 str2원래 명령줄에서 인수를 복사하는 올바른 표기법은 무엇입니까?

답변1

lxterminal문제는 s에 대한 인수가 --command단지 문자열이기 때문에 다른 터미널처럼 명령과 해당 인수를 받아들일 수 없다는 것입니다 xterm.

lxterminal자체 규칙을 사용하여 문자열을 구문 분석하여 해당 인수를 실행할 명령을 결정합니다. 이는 Bourne 쉘 구문 분석과 유사하지만 동일하지는 않습니다.

매개변수 구분 기호로 큰 따옴표와 공백을 인식 하므로 '...'다음과 같이 인용을 구현할 수 있습니다.

lxquote() {
  awk -v q="'" '
    function lxquote(s) {
      gsub(q, q "\\" q q, s)
      return q s q
    }
    BEGIN {
      for (i = 1; i < ARGC; i++) {
        printf sep "%s", lxquote(ARGV[i])
        sep = " "
      }
    }' "$@"
}

다음과 같이 호출됩니다 lxterminal.

lxterminal --command="$(lxquote ./script2 "$@")"

또는 script인터프리터가 인 경우 bash다음을 수행할 수 있습니다.

printf -v code '%q ' ./script2 "$@"
CODE=$code lxterminal --command="bash -c 'eval \"\$CODE\"'"

관련 정보