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

629

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

./myprogram &; echo $!

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

  • 12
    Некоторые из них не только для Bash. Они также используются в других оболочках, связанных с Bourne, и фактически определяются POSIX .
  • 1
    Как насчет: IFS = $ '\ n' См .: stackoverflow.com/questions/4128235/…
Показать ещё 1 комментарий
Теги:
echo
environment-variables
dollar-sign

4 ответа

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

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

Для всеобъемлющего индекса см. Справочное руководство по индексу переменной.

  • 2
    Все они описаны на странице руководства bash . Единственная странность в том, что $_ упоминается только в контексте его использования в переменной MAILPATH .
  • 4
    @chepner посмотрите в man(1) bash разделе « Специальные параметры» для остальной части определения $_ .
Показать ещё 7 комментариев
46
  • $_ последний аргумент последней команды
  • $# количество аргументов, переданных текущему script
  • $*/$@ список аргументов, переданных в script как список строк/разделов

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

  • 108
    "Я сделал. Они послали меня сюда." - Книжный скит (официальный документ: gnu.org/software/bash/manual/bashref.html#Special-Parameters )
  • 1
    Я думаю, что $@ - это строка, а $* - это список с разделителями (в любом случае, согласно принятому выше ответу).
Показать ещё 2 комментария
9

Чтобы понять, что делают $#, $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

  • 2
    То, содержит ли $ 0 путь или нет, зависит от того, как вы запустили скрипт. Если вы выполнили «./mytry.sh», это то, что вы увидите в $ 0. Если вы ввели «~ / mytry.sh», вы увидите полный путь (потому что оболочка будет расширена ~). Если вы сделали «. Mytry.sh», вы увидите «bash».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню