Perl 命令行脚本和 shell 变量 : How to quote?

标签 perl variables unix quotes

我有一个像这样调用 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/

相关文章:

matlab - 在 MATLAB 中的循环中声明全局变量

Java - 数组名称等于字符串变量的值

shell - "Variable not found"shell发出的错误

perl - 无法可视化 Chart::Gnuplot 图例中的点

perl - 如何使用 AWK 或 sed 或 Perl 进行此类替换?

regex - 如何从动态创建的 URL 中删除点

perl - Sublime 3 (Ubuntu) 中的交互式 Perl 编程

c++ - 如何在 unix 上将控制台光标移动到 (x, y)?

postgresql - 退出 postgres UNIX 帐户

unix - 批量替换文本文件中的文本(Linux/OSX 命令行)