Каковы специальные переменные оболочки знака доллара?

В 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

Другие вопросы по тегам