Jakie jest użycie $ & w bash?

10

Patrzyłem na specjalne parametry w bash. Jestem ciekawy, co to jest $&i czym się różni $_.

Podczas uruchamiania poleceń widzę następujące dane wyjściowe, ale nie mogę również znaleźć znaczenia.

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

[1]+  Done                    echo $
k@Linux:~$ 
Kajal Sinha
źródło

Odpowiedzi:

18

$&nie jest pojedynczą zmienną token / special, jest po prostu $i &.

Polecenie echo $&jest traktowane jako echo $ &, które $w tle przypomina echo literału .

$_ z drugiej strony jest specjalna zmienna, która rozwija się do ostatniego argumentu ostatniego wykonanego polecenia.

Mata
źródło
5

Chociaż bashaspekt został omówiony, twoje pytanie sprawia, że ​​myślę, że natrafiłeś na te zmienne w perlkodzie.

$&i $_są specjalnymi zmiennymi w perl. I są szczególnie widoczne w perlkodzie wywoływanym z kodu powłoki.

$_jest zmienną domyślną, perlnad którą pracuje wiele funkcji i operatorów. Ta zmienna jest również zmienną domyślną ustawianą przez operatory wejściowe.

W:

perl -pe 'some-code' < some-input

Część kodu jest uruchamiana dla każdego wiersza niektórych danych wejściowych, z wierszem zapisanym $_, a treść $_jest drukowana po uruchomieniu jakiegoś kodu.

s/regex/replacement/Operator działa na $_domyślnie. Więc często znajdziesz takie rzeczy jak:

perl -pe 's/foo/bar/'

Co jest skrótem od:

perl -pe '$_ =~ s/foo/bar/'

(powyżej, $_jeśli chodzi o powłokę , to tylko część dosłownego argumentu przekazanego perlinterpreterowi, nie jest to zmienna powłoki. Ten dosłowny argument jest przekazywany jako perlwyrażenie ( -e) do perl, i perldlatego jest interpretowany jako zmienna).

$&jest kolejną specjalną perlzmienną, która rozwija się do wszystkiego, co zostało dopasowane przez ostatni pasujący operator ( m/.../, s/.../.../...).

Na przykład:

$ echo foo | perl -lne '
    print "The last character in $_ is $&" if m/.$/'
The last character in foo is o

Lub:

$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r
Stéphane Chazelas
źródło
1

Zapewnienie &oznacza, że ​​zamierzasz uruchomić określoną komendę w wewnętrznej bazie danych lub jako zadanie. Tak echo $&daje wynik.

Colonial Dunky
źródło