Bien que l' bash
aspect ait été couvert, votre question me fait penser que vous avez rencontré ces variables dans le perl
code.
$&
et $_
sont des variables spéciales dans perl
. Et ils se trouvent surtout dans le perl
code appelé depuis le code shell.
$_
est la variable par défaut sur laquelle de nombreuses perl
fonctions et opérateurs travaillent. Cette variable est également la variable par défaut définie par les opérateurs d'entrée.
Dans:
perl -pe 'some-code' < some-input
Some-code est exécuté pour chaque ligne de some-input, avec la ligne stockée dans $_
, et le contenu du $_
est imprimé après l'exécution de some-code.
L' s/regex/replacement/
opérateur fonctionne $_
par défaut. Vous trouvez donc souvent des choses comme:
perl -pe 's/foo/bar/'
Ce qui est l'abréviation de:
perl -pe '$_ =~ s/foo/bar/'
(ci-dessus, $_
en ce qui concerne le shell n'est qu'une partie d'un argument verbatim passé à l' perl
interpréteur, ce n'est pas une variable shell. Cet argument verbatim est passé en tant perl
qu'expression ( -e
) à perl
, et c'est pour perl
cela qu'il est interprété comme un variable).
$&
est une autre perl
variable spéciale qui s'étend à tout ce qui a été mis en correspondance par le dernier opérateur de mise en correspondance ( m/.../
, s/.../.../
...).
Par exemple:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
Ou:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r
Stéphane Chazelas
la source