TCSH: TCSH 스크립트에서 perl -e를 사용할 때 "문자열 종결자를 찾을 수 없음" 오류 발생

TCSH: TCSH 스크립트에서 perl -e를 사용할 때 "문자열 종결자를 찾을 수 없음" 오류 발생

tcsh 스크립트에서 이 오류가 표시되지만 이유를 이해할 수 없습니다.

스크립트:

#!/usr/bin/env tcsh
foreach n (0 1)
  set PERL_CMD = "perl -e 'print qq^RUNNING^; exit ${n} '"
  echo "PERL_CMD:\n${PERL_CMD}"
  ${PERL_CMD}
  echo
end

결과:

[]$ ./test_perl_e.csh
PERL_CMD:
perl -e 'print qq^RUNNING^; exit 0 '
Can't find string terminator "'" anywhere before EOF at -e line 1.

PERL_CMD:
perl -e 'print qq^RUNNING^; exit 1 '
Can't find string terminator "'" anywhere before EOF at -e line 1.

명령줄에서 PERL_CMD를 실행하면 정상적으로 작동합니다.

[]$ perl -e 'print qq^RUNNING^; exit 1 '
RUNNING[]$ 

tcsh 스크립트를 삽입하면 정상적으로 에코됩니다. 그런데 실행하려고 하면 깨집니다.

나는 많은 변형을 시도했지만 당황했습니다. 내가 뭘 잘못했나요?


Perl/5.24 사용

[]$ perl -v
This is perl 5, version 24, subversion 0 (v5.24.0) built for x86_64-linux

답변1

cshell에서 원하는 관용적 방법은 a) 배열을 사용하고 b) 올바른 참조 연산자를 사용하는 것입니다. 에서 읽을 수 있습니다 man tcsh.

#!/usr/bin/env tcsh
set perl = "perl"

set options = ( -w -l )

foreach n (0 9)
  set cmd = "\
    print qq/running/;\
    exit($n); \
  "

  "${perl}" \
    ${options[*]:x} \
    -e ${cmd:q}  \
  ;

  echo ""
end 

관련 정보