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