如何告诉bash不要扩展$ _变量?

Rog*_*ach 5 bash perl

我想使用一些perl行,如下所示:

perl -pe "$_=~s///e"
Run Code Online (Sandbox Code Playgroud)

问题是,bash不断扩展"$ _"变量.我可以将perl表达式放入单引号中,但这会阻止我在脚本中添加一些变量.

有没有办法阻止bash扩展"$ _"变量?

TLP*_*TLP 5

首先:你知道你可以$ENV{myvariable}用来访问环境变量,对吗?并且您不需要在使用$_时指定m//,s///并且tr///

此外,如果要将变量传递给perl,除了尝试将shell变量插入到perl代码中之外,还有其他方法可以执行此操作.

perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz"
Run Code Online (Sandbox Code Playgroud)

如果shell变量不包含空格,则可以省略引用.

现在,如果你想使用-p或者-n开关,那么也有办法.

perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here'
    "$MYFOO" "$BAR" file1 file2 
Run Code Online (Sandbox Code Playgroud)

使用shift在BEGIN语句将删除变量@ARGV,使它们不使用隐式while的循环-p-n开关.