bash中$&的用法是什么?


10

我正在研究bash中的特殊参数。我很好奇知道$&它是什么以及与它有什么不同$_

运行命令时,我看到以下输出,但也找不到相应的含义。

k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n

[1]+  Done                    echo $
k@Linux:~$ 

Answers:


18

$&不是单个标记/特殊变量,而是$&

该命令echo $&被视为echo $ &,它$在后台回显文字。

$_ 另一方面,是一个特殊变量,它扩展为最近执行的命令的最后一个参数。


5

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)传递perlperl,它被解释为变量)。

$&是另一个特殊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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.