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

В 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