Jakie są specjalne Zmienne powłoki dolara?

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 wytłoczył myprogram. Wiem o innych, takich jak $?, które myślę, że jest obecny TTY. Są inni?

Author: codeforester, 2011-03-02

4 answers

  • $1, $2, $3, ... są parametrami pozycyjnymi .
  • {[3] } jest strukturą podobną do tablicy wszystkich parametrów pozycyjnych, {$1, $2, $3 ...}.
  • {[5] } jest rozszerzeniem IFS wszystkich parametrów pozycyjnych, $1 $2 $3 ....
  • {[7] } jest liczbą parametrów pozycyjnych.
  • $- bieżące opcje ustawione dla powłoki.
  • $$ pid aktualnej powłoki (nie subshell).
  • $_ Najnowszy parametr (lub ścieżka abs polecenia do Uruchom bieżącą powłokę natychmiast po uruchomieniu).
  • $IFS jest separatorem pól (wejściowych).
  • $? jest najnowszym stanem wyjścia Potoku na pierwszym planie.
  • $! jest PID najnowszego polecenia tła.
  • $0 to nazwa powłoki lub skryptu powłoki.

Większość powyższych informacji można znaleźć pod parametrami specjalnymi w podręczniku referencyjnym Bash. Istnieją wszystkie zmienne środowiskowe ustawione przez shell .

Aby uzyskać pełny indeks, zobacz Reference Manual Variable Index .

 1431
Author: kojiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 12:46:21
  • $_ ostatni argument ostatniego polecenia
  • $# liczba argumentów przekazywanych do bieżącego skryptu
  • $* / $@ lista argumentów przekazywanych do skryptu jako lista łańcuchowa / rozdzielana

Off the top of My head. Google dla zmiennych specjalnych bash.

 45
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 03:46:22

Aby pomóc zrozumieć, co zrobić $#, $0 i $1,..., $n do, używam tego skryptu:

#!/bin/bash

for ((i=0; i<=$#; i++)); do
  echo "parameter $i --> ${!i}"
done

Uruchomienie zwraca reprezentacyjne wyjście:

$ ./myparams.sh "hello" "how are you" "i am fine"
parameter 0 --> myparams.sh
parameter 1 --> hello
parameter 2 --> how are you
parameter 3 --> i am fine
 15
Author: fedorqui 'SO stop harming',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 12:46:22

Zwróć uwagę na niektóre przykłady; $0 może zawierać ścieżkę wiodącą, jak również nazwę programu. Np. zapisz ten dwuliniowy skrypt jako. / mytry.sh i wykonaj go.

#!/bin/bash

echo "parameter 0 --> $0" ; exit 0

Wyjście:

parameter 0 --> ./mytry.sh

To jest na bieżącej (rok 2016) wersji Bash, poprzez Slackware 14.2

 3
Author: Adrian Cole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-14 11:32:29