我想使用一些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
开关.