我正在研究 bash 中的特殊参数。我很想知道什么是$&
以及它与 有何不同$_
。
运行命令时我看到以下输出,但也无法找到其含义。
k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n
[1]+ Done echo $
k@Linux:~$
答案1
$&
不是单个标记/特殊变量,它只是$
和&
。
该命令echo $&
被视为,它在后台echo $ &
回显文字。$
$_
另一方面是一个特殊变量,它扩展到最近执行的命令的最后一个参数。
答案2
虽然已经涵盖了这个方面,但你的问题让我认为你已经在代码bash
中遇到了这些变量。perl
$&
和$_
是 中的特殊变量perl
。它们尤其出现在perl
从 shell 代码调用的代码中。
$_
是许多函数和运算符处理的默认变量perl
。该变量也是输入运算符设置的默认变量。
在:
perl -pe 'some-code' < some-input
some-code 对 some-input 的每一行运行,该行存储在 中,并且在 some-code 运行后打印 的$_
内容。$_
运算符默认s/regex/replacement/
工作。$_
所以你经常会发现这样的事情:
perl -pe 's/foo/bar/'
这是以下的缩写:
perl -pe '$_ =~ s/foo/bar/'
(以上,$_
,至壳所关心的只是传递给perl
解释器的逐字参数的一部分,它不是 shell 变量。该逐字参数作为perl
表达式 ( -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
答案3
提供&
意味着您将在后端或作为作业运行特定命令。这就是 的输出echo $&
给出的结果。