Специальные переменные оболочки
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 • Параметр • Переменная