Каковы специальные переменные оболочки знака доллара?
В Bash, по-видимому, есть несколько переменных, которые содержат специальные значения, имеющие постоянное значение. Например,
./myprogram &; echo $!
вернет PID процесса, который основан myprogram
, Я знаю о других, таких как $?
который я считаю текущим TTY. Есть ли другие?
4 ответа
$1
,$2
,$3
,... являются позиционными параметрами."$@"
является массивоподобной конструкцией всех позиционных параметров,{$1, $2, $3 ...}
,"$*"
является расширение IFS всех позиционных параметров,$1 $2 $3 ...
,$#
количество позиционных параметров.$-
текущие параметры, установленные для оболочки.$$
pid текущей оболочки (не subshell).$_
самый последний параметр (или путь abs команды для запуска текущей оболочки сразу после запуска).$IFS
является (входным) разделителем полей.$?
самый последний статус выхода на передний план трубопровода.$!
это PID самой последней фоновой команды.$0
это имя оболочки или сценария оболочки.
Большинство из вышеперечисленного можно найти в разделе " Специальные параметры" Справочного руководства Bash. Есть все переменные окружения, установленные оболочкой.
Подробный указатель приведен в Справочном руководстве "Переменный указатель".
$_
последний аргумент последней команды$#
количество аргументов, переданных в текущий скрипт$*
/$@
список аргументов, передаваемых скрипту в виде списка строк / разделителей
с верхней части моей головы. Google для Bash специальных переменных.
Чтобы помочь понять, что делать $#
, $0
а также $1
, ..., $n
делаю, я использую этот скрипт:
#!/bin/bash
for ((i=0; i<=$#; i++)); do
echo "parameter $i --> ${!i}"
done
Запуск его возвращает репрезентативный вывод:
$ ./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
Позаботьтесь о некоторых примерах; $0 может включать в себя начальный путь, а также название программы. Например, сохраните этот двухстрочный сценарий как./mytry.sh и выполните его.
#!/bin/bash
echo "parameter 0 --> $0" ; exit 0
Выход:
parameter 0 --> ./mytry.sh
Это на текущей (2016 год) версии Bash, через Slackware 14.2