Каковы специальные переменные оболочки знака доллара? - PullRequest
728 голосов
/ 02 марта 2011

В Bash, похоже, есть несколько переменных, которые содержат специальные значения, имеющие постоянное значение.Например,

./myprogram &; echo $!

вернет PID процесса, который был основан на myprogram.Я знаю о других, таких как $?, который я считаю текущим TTY.Есть ли другие?

Ответы [ 4 ]

1237 голосов
/ 02 марта 2011
  • $1, $2, $3, ... являются позиционными параметрами .
  • "$@" является массивоподобной конструкцией всех позиционныхпараметры, {$1, $2, $3 ...}.
  • "$*" - расширение IFS всех позиционных параметров, $1 $2 $3 ....
  • $# - число позиционных параметров.
  • $- текущие параметры, установленные для оболочки.
  • $$ pid текущей оболочки (не подоболочки).
  • $_ самый последний параметр (или путь abs команды кзапустить текущую оболочку сразу после запуска).
  • $IFS - это разделитель (входных) полей.
  • $? - это последнее состояние выхода из конвейера переднего плана.
  • $! - это PID самой последней фоновой команды.
  • $0 - это имя оболочки или сценария оболочки.

Большинство из вышеперечисленных можно найти в разделе Специальные параметры в Справочном руководстве Bash.Существуют все переменные окружения , установленные оболочкой .

Полный список приведен в справочном руководстве по переменным индексам .

46 голосов
/ 02 марта 2011
  • $_ последний аргумент последней команды
  • $# количество аргументов, переданных текущему сценарию
  • $* / $@ список аргументов, переданных в скрипт какстрока / разделенный список

с макушки головы.Google для специальных переменных bash.

13 голосов
/ 25 апреля 2016

Чтобы понять, что делают $#, $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
4 голосов
/ 14 сентября 2016

Позаботьтесь о некоторых примерах;$ 0 может включать в себя начальный путь, а также название программы.Например, сохраните этот двухстрочный сценарий как ./mytry.sh и выполните его.

#!/bin/bash

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

Вывод:

parameter 0 --> ./mytry.sh

Это на текущей (2016 год) версии Bash,через Slackware 14,2

...