我正在研究bash中的特殊参数。我很好奇知道$&它是什么以及与它有什么不同$_。
运行命令时,我看到以下输出,但也找不到相应的含义。
k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n
[1]+ Done echo $
k@Linux:~$
我正在研究bash中的特殊参数。我很好奇知道$&它是什么以及与它有什么不同$_。
运行命令时,我看到以下输出,但也找不到相应的含义。
k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n
[1]+ Done echo $
k@Linux:~$
Answers:
在bash涵盖了方面之后,您的问题使我认为您已经在perl代码中遇到了这些变量。
$&和$_是中的特殊变量perl。而且它们特别存在于perl从shell代码调用的代码中。
$_是许多perl函数和运算符使用的默认变量。该变量也是输入运算符设置的默认变量。
在:
perl -pe 'some-code' < some-input
对some-input的每一行都运行some-code,并将该行存储在中$_,并且$_在some-code运行后将打印出内容。
默认情况下,该s/regex/replacement/操作员会工作$_。因此,您经常会发现以下内容:
perl -pe 's/foo/bar/'
这是以下简称:
perl -pe '$_ =~ s/foo/bar/'
(以上,$_就shell而言,只是传递给perl解释器的逐字引数的一部分,它不是shell变量。该逐字引数作为perlexpression(-e)传递perl给perl,它被解释为变量)。
$&是另一个特殊perl变量,它扩展为最后一个匹配运算符(m/.../,s/.../.../...)所匹配的值。
例如:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
要么:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r