W Bash wydaje się, że istnieje kilka zmiennych, które posiadają specjalne, konsekwentnie znaczące wartości. Na przykład,
./myprogram &; echo $!
zwróci PID procesu, który był w tle myprogram
. Znam inne, na przykład takie, $?
które według mnie są obecnym TTY. Czy są jeszcze inni?
bash
environment-variables
dollar-sign
Z Douglas
źródło
źródło
$'\n'
jest dosłownie znakiem nowej linii, który powstaje w wyniku zastąpienia digraftu\n
przez ASCII 10.${1}
,${*}
itp, szelki są tylko dla dezambiguacji, często zbędne. W izolacji${x}
jest dokładnie równoważne z$x
.$!
znaczy Jestem tego świadomy,!$
ale nie taki.Odpowiedzi:
$1
,$2
,$3
, ... są parametry pozycyjne ."$@"
Jest to konstrukcja tablicowej wszystkich parametrów pozycyjnych{$1, $2, $3 ...}
."$*"
jest rozszerzenie IFS wszystkich parametrów pozycyjnych$1 $2 $3 ...
.$#
to liczba parametrów pozycyjnych.$-
bieżące opcje ustawione dla powłoki.$$
pid bieżącej powłoki (nie podpowłoki).$_
najnowszy parametr (lub ścieżka abs polecenia, aby uruchomić bieżącą powłokę natychmiast po uruchomieniu).$IFS
jest separatorem pól (wejściowych).$?
to najnowszy status wyjścia z rurociągu pierwszego planu.$!
jest PID najnowszego polecenia w tle.$0
to nazwa powłoki lub skryptu powłoki.Większość powyższych można znaleźć w sekcji Parametry specjalne w podręczniku Bash Reference. Istnieją wszystkie zmienne środowiskowe ustawione przez powłokę .
Aby zapoznać się z pełnym indeksem, zobacz Indeks zmiennych .
źródło
bash
stronie man. Jedyną osobliwością jest to, że$_
jest wspomniane tylko w kontekście jej użycia wMAILPATH
zmiennej.man(1) bash
sekcji Parametry specjalne, aby zobaczyć resztę definicji$_
.!$
zamiast$_
w skryptach bash, ponieważ te ostatnie czasami zawodzą.!$
i$_
.$_
ostatni argument ostatniego polecenia$#
liczba argumentów przekazanych do bieżącego skryptu$*
/$@
lista argumentów przekazanych do skryptu jako lista ciąg / lista rozdzielanaz czubka mojej głowy. Google dla zmiennych specjalnych bash.
źródło
$@
jest to ciąg znaków i$*
lista rozdzielana (zgodnie z powyższą zaakceptowaną odpowiedzią, tak czy inaczej)."$@"
rozwija się do listy,"$*"
rozwija się do pojedynczego ciągu. Specjalne zachowanie$@
ma zastosowanie, gdy występuje w podwójnych cudzysłowach.Aby pomóc zrozumieć, co nie
$#
,$0
i$1
, ...,$n
nie używam tego skryptu:Uruchomienie zwraca reprezentatywne wyjście:
źródło
Przestrzegaj niektórych przykładów; $ 0 może zawierać ścieżkę wiodącą, a także nazwę programu. Np. Zapisz ten dwuliniowy skrypt jako ./mytry.sh i uruchom go.
Wynik:
Jest to aktualna wersja Bash (rok 2016), za pośrednictwem Slackware 14.2
źródło