$& 在bash中的用法是什么?

Kaj*_*nha 10 shell bash

我正在研究 bash 中的特殊参数。我很想知道什么是$&以及它与$_.

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

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

[1]+  Done                    echo $
k@Linux:~$ 
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 18

$&不是单个标记/特殊变量,它只是$and &

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

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


Sté*_*las 5

虽然bash已经涵盖了方面,但您的问题让我觉得您已经在perl代码中遇到了这些变量。

$&并且$_是 中的特殊变量perl。并且它们尤其出现在perl从 shell 代码调用的代码中。

$_是许多perl函数和运算符使用的默认变量。该变量也是输入运算符设置的默认变量。

在:

perl -pe 'some-code' < some-input
Run Code Online (Sandbox Code Playgroud)

some-code 为 some-input 的每一行运行,该行存储在 中$_,并且$_在 some-code 运行后打印的内容。

s/regex/replacement/运营商工作在$_默认情况下。所以你经常会发现这样的事情:

perl -pe 's/foo/bar/'
Run Code Online (Sandbox Code Playgroud)

简称:

perl -pe '$_ =~ s/foo/bar/'
Run Code Online (Sandbox Code Playgroud)

(以上,$_shell而言,它只是传递给perl解释器的逐字参数的一部分,它不是 shell 变量。逐字参数作为perl表达式 ( -e)传递给perlperl因为它被解释为多变的)。

$&是另一个特殊perl变量,它扩展为最后一个匹配运算符 ( m/.../, s/.../.../...)匹配的任何内容。

例如:

$ echo foo | perl -lne '
    print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
Run Code Online (Sandbox Code Playgroud)

或者:

$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r
Run Code Online (Sandbox Code Playgroud)