À quoi sert $ & in bash?

10

Je cherchais des paramètres spéciaux dans bash. Je suis curieux de savoir de quoi il s'agit $&et en quoi il diffère $_.

Je vois la sortie suivante lors de l'exécution des commandes mais je n'ai pas pu localiser la signification également.

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

[1]+  Done                    echo $
k@Linux:~$ 
Kajal Sinha
la source

Réponses:

18

$&n'est pas un seul jeton / variable spéciale, c'est simplement $et &.

La commande echo $&est traitée comme echo $ &, qui fait écho à un littéral $en arrière-plan.

$_ d'autre part est une variable spéciale qui se développe jusqu'au dernier argument de la commande la plus récente exécutée.

Tapis
la source
5

Bien que l' bashaspect ait été couvert, votre question me fait penser que vous avez rencontré ces variables dans le perlcode.

$&et $_sont des variables spéciales dans perl. Et ils se trouvent surtout dans le perlcode appelé depuis le code shell.

$_est la variable par défaut sur laquelle de nombreuses perlfonctions 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' perlinterpréteur, ce n'est pas une variable shell. Cet argument verbatim est passé en tant perlqu'expression ( -e) à perl, et c'est pour perlcela qu'il est interprété comme un variable).

$&est une autre perlvariable 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
1

Fournir &signifie que vous allez exécuter une commande particulière dans le backend ou en tant que travail. Voilà donc ce que echo $&donne la sortie de .

Colonial Dunky
la source