我想使用一些perl行,如下所示:
perl -pe "$_=~s///e"
Run Code Online (Sandbox Code Playgroud)
问题是,bash不断扩展"$ _"变量.我可以将perl表达式放入单引号中,但这会阻止我在脚本中添加一些变量.
有没有办法阻止bash扩展"$ _"变量?
j13*_*13r 11
perl -pe '$_=~s///e'
Run Code Online (Sandbox Code Playgroud)
要么
perl -pe "\$_=~s///e"
Run Code Online (Sandbox Code Playgroud)
首先:你知道你可以$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开关.