Что такое использование $ & в Bash?

10

Я искал специальные параметры в Bash. Мне любопытно узнать, чем $&и чем он отличается $_.

Я вижу следующий вывод при запуске команд, но не могу найти значение также.

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

[1]+  Done                    echo $
k@Linux:~$ 
Каджал Синха
источник

Ответы:

18

$&это не единственная токен / специальная переменная, это просто $и &.

Команда echo $&обрабатывается как echo $ &, что повторяет литерал $на заднем плане.

$_ с другой стороны, это специальная переменная, которая расширяется до последнего аргумента последней выполненной команды.

Мат
источник
5

Несмотря на то, что этот bashаспект был рассмотрен, ваш вопрос заставляет меня думать, что вы встретили эти переменные в perlкоде.

$&и $_специальные переменные в perl. И они особенно найдены в perlкоде, вызванном из кода оболочки.

$_является переменной по умолчанию, над которой perlработают многие функции и операторы. Эта переменная также является переменной по умолчанию, установленной операторами ввода.

В:

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

Some-код запускается для каждой строки некоторого ввода, где строка сохраняется $_, а содержимое $_печатается после выполнения some-кода.

s/regex/replacement/Оператор работает по $_умолчанию. Поэтому вы часто находите такие вещи, как:

perl -pe 's/foo/bar/'

Что сокращенно от:

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

(выше, $_что касается оболочки , это только часть дословного аргумента, передаваемого perlинтерпретатору, это не переменная оболочки. Этот дословный аргумент передается как 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
Стефан Шазелас
источник
1

Предоставление &означает, что вы собираетесь выполнить определенную команду в бэкэнде или в качестве задания. Вот что echo $&дает выход .

Колониальный Данки
источник