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 

相关内容