Специальные переменные оболочки
10.05.2018
Теги: Bash • CLI • Linux • Параметр • Переменная
$1...$9
— Это так называемые позиционные параметры, служат для передачи сценарию оболочки аргументов командной строки. Если аргументов больше 9, то они должны заключаться в фигурные скобки, например${12}
.$0
— Имя командной оболочки или запущенного сценария.$#
— Количество позиционных параметров, переданных сценарию.$*
— Позиционные параметры, начиная с первого. Когда$*
указывается в двойных кавычках, значение переменной заменяется одним словом, содержащим значения каждого параметра, разделенных первым символом специальной переменнойIFS
.$@
— Позиционные параметры, начиная с первого. Когда$@
указывается в двойных кавычках, то каждый параметр возвращается в отдельном слове.$?
— Код возврата последней команды.$!
— Возвращает идентификатор процесса последней команды, выполненной в фоновом режиме.$$
— Номер процесса, под которым исполняется данный сценарий, очень удобно использовать в имени временного файла, чтобы сделать его уникальным.
Отличие между $* и $@
Если не использовать кавычки, между переменными $*
и $@
нет разницы:
#!/bin/bash
for param in $* ; do
echo $param
done
echo '====='
for param in $@ ; do
echo $param
done
$ ./test.sh first second third # три позиционных параметра first second third ===== first second third
$ ./test.sh 'first second' third # два позиционных параметра first second third ===== first second third
Выполняется подстановка позиционных параметров в операторе цикла for
, кавычки при этом отбрасываются. Т.е. будет выполнен код:
#!/bin/bash
for param in first second third ; do
echo $param
done
Если переменная $*
заключена в кавычки, все позиционные параметры будут заменены на один, содержащий все позиционные параметры, разделенные первым символом специальной переменной IFS
(по умолчанию пробел):
#!/bin/bash
for param in "$*" ; do
echo $param
done
$ ./test.sh first second third # три позиционных параметра first second third
$ ./test.sh 'first second' third # два позиционных параметра first second third
Фактически, и при передаче трех параметров, и при передаче двух, будет выполнен код:
#!/bin/bash
for param in 'first second third' ; do
echo $param
done
Если переменная $@
заключена в кавычки, то сценарию будут переданы значения "$1"
, "$2"
и так далее:
#!/bin/bash
for param in "$@" ; do
echo $param
done
$ ./test.sh first second third # три позиционных параметра first second third
$ ./test.sh 'first second' third # два позиционных параметра first second third
Фактически, в первом случае (три позиционных параметра) будет выполнен код:
#!/bin/bash
for param in first second third ; do
echo $param
done
А во втором случае (два позиционных параметра) — код:
#!/bin/bash
for param in 'first second' third ; do
echo $param
done
Поиск: Bash • CLI • Linux • Параметр • Переменная