Специальные переменные оболочки

10.05.2018

Теги: BashCLILinuxПараметрПеременная

  • $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 • Параметр • Переменная

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.