В Bash, по-видимому, есть несколько переменных, которые содержат специальные значения, имеющие постоянное значение. Например,
./myprogram &; echo $!
вернет PID процесса, который в фоновом режиме myprogram
. Я знаю о других, таких как, $?
я думаю, нынешний TTY. Есть ли другие?
bash
environment-variables
dollar-sign
Z Дуглас
источник
источник
$'\n'
буквальный символ новой строки, полученный в результате замены орграфа\n
на ASCII 10.${1}
,${*}
и т.д., скобка только для устранения неоднозначности, и часто избыточна. В изоляции,${x}
в точности соответствует$x
.$!
значит? Я знаю,!$
но не это.Ответы:
$1
,$2
,$3
, ... являются позиционными параметрами ."$@"
представляет собой массив, как конструкция всех позиционных параметров,{$1, $2, $3 ...}
."$*"
является расширением МФСА всех позиционных параметров,$1 $2 $3 ...
.$#
количество позиционных параметров.$-
текущие параметры, установленные для оболочки.$$
pid текущей оболочки (не subshell).$_
самый последний параметр (или путь abs команды для запуска текущей оболочки сразу после запуска).$IFS
является (входным) разделителем полей.$?
самый последний статус выхода на передний план трубопровода.$!
PID самой последней фоновой команды.$0
имя оболочки или сценария оболочкиБольшинство из вышеперечисленного можно найти в разделе « Специальные параметры» справочного руководства Bash. Есть все переменные окружения, установленные оболочкой .
Подробный указатель приведен в справочном руководстве Переменный указатель .
источник
bash
справочной странице. Единственная странность в том, что$_
она упоминается только в контексте ее использования вMAILPATH
переменной.man(1) bash
разделе « Специальные параметры» остальную часть определения$_
.!$
вместо$_
сценариев bash, потому что последний иногда дает сбой.!$
и$_
.$_
последний аргумент последней команды$#
количество аргументов, переданных в текущий скрипт$*
/$@
список аргументов, передаваемых скрипту в виде строки / списка с разделителямис верхней части моей головы. Google для Bash специальных переменных.
источник
$@
это строка и$*
список с разделителями (в любом случае согласно принятому выше ответу)."$@"
разворачивается в список,"$*"
разворачивается в одну строку. Особое поведение$@
применяется, когда оно находится в двойных кавычках.Чтобы помочь понять, что делать
$#
,$0
и$1
, ...,$n
делаю, я использую этот скрипт:Запуск его возвращает репрезентативный вывод:
источник
Позаботьтесь о некоторых примерах; $ 0 может включать в себя начальный путь, а также название программы. Например, сохраните этот двухстрочный скрипт как ./mytry.sh и выполните его.
Вывод:
Это на текущей (2016 год) версии Bash, через Slackware 14.2
источник