我有一个像这样调用 Perl 的 shell 脚本 (csh):
set SHELL_VAR = "foo"
set RES = `perl -e 'my $perl_var = uc("$SHELL_VAR"); print "$perl_var\n"'`
echo $RES
无论我尝试哪种组合,我都无法正确使用单引号或双引号。
如何在 Perl 和 shell 中正确混合变量?
两者都以$
开头。双引号使用变量值,但返回
error
perl_var: Undefined variable.
在外壳中。用单引号将 Perl 脚本括起来会导致空结果。像 \$perl_var
这样的转义也不会成功。
最佳答案
您正在尝试将 shell var 的值插入到命令行中程序的 Perl 文本中。这是两个级别的逃脱!相反,只需将它作为参数传递给 Perl。
% set SHELL_VAR = "foo"
% set RES = `perl -e'print uc($ARGV[0])' "$SHELL_VAR"`
% echo "$RES"
FOO
哦!这不太正确。
csh% set SHELL_VAR = foo\"\'\(\ \ \ \$bar
csh% set RES = `perl -e'print uc($ARGV[0])' "$SHELL_VAR"`
csh% echo "$RES"
FOO"'( $BAR
我应该得到
FOO"'( $BAR
在 sh
中,我会使用 RES="` ... `"
又名 "$( ... ")
,但我不知道 csh 的等效项。如果有人可以解决上述问题,以便打印多个空格,我将不胜感激!
sh$ shell_var=foo\"\'\(\ \ \ \$bar
sh$ res="$( perl -e'print uc($ARGV[0])' "$shell_var" )"
sh$ echo "$res"
FOO"'( $BAR
关于Perl 命令行脚本和 shell 变量 : How to quote?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24059209/