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