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