Создается переменная myvar
, и ей присваивается строка Hi there
. Содержимое переменной выводится на экран с помощью команды echo
, демонстрирующей, как символ $
раскрывает содержимое переменной. Вы видите, что применение двойных кавычек не влияет на раскрытие содержимого переменной, а одинарные кавычки и обратный слэш влияют. Вы также применяете команду read
для получения строки от пользователя.
Когда стартует сценарий командной оболочки, некоторым переменным присваиваются начальные значения из окружения или рабочей среды. Обычно такие переменные обозначают прописными буквами, чтобы отличать их в сценариях от определенных пользователем переменных (командной оболочки), которые принято обозначать строчными буквами. Формируемые переменные зависят от ваших персональных настроек. Многие из них перечислены на страницах справочных руководств, а основные приведены в табл. 2.2.
Переменная окружения | Описание |
---|---|
$НОМЕ | Исходный каталог текущего пользователя |
$PATH | Разделенный двоеточиями список каталогов для поиска команд |
$PS1 | Подсказка или приглашение командной строки. Часто знак $ , но в оболочке bash можно применять и более сложные варианты. Например, строка [\u@\h \w]$ — популярный стандарт, сообщающий в подсказке пользователя имя компьютера и текущий каталог, а также знак $ |
$PS2 | Дополнительная подсказка или приглашение, применяемое как приглашение для дополнительного ввода; обычно знак > |
$IFS | Разделитель полей ввода. Список символов, применяемых для разделения слов при чтении оболочкой ввода, как правило, пробел, знак табуляции и символ перехода на новую строку |
$0 | Имя сценария командной оболочки |
$# | Количество передаваемых параметров |
$$ | ID (идентификатор) процесса сценария оболочки, часто применяемый внутри сценария для генерации уникальных имен временных файлов; например, /tmp/tmpfile_$$ |
Если вы хотите проверить с помощью команды env <
env
. Далее в этой главе вы увидите, как задавать переменные окружения в подоболочках (subshells), применяя команду export
.
Если ваш сценарий вызывается с параметрами, создается несколько дополнительных переменных. Если параметры не передаются, переменная окружения $#
все равно существует, но равна 0.
Переменные-параметры перечислены в табл. 2.3.
Переменная-параметр | Описание |
---|---|
$1 , $2 , ... | Параметры, передаваемые сценарию |
$* | Список всех параметров в единственной переменной, разделенных первым символом из переменной окружения IFS . Если IFS корректируется, способ разделения командной строки на параметры в переменной $* изменяется |
$@ | Едва различимая вариация $* ; не использует переменную окружения IFS , поэтому параметры не сольются, даже если переменная IFS пуста |
Легче всего увидеть разницу между переменными-параметрами $*
и $@
, опробовав их.
$ IFS=''
$ set foo bar bam
$ echo "$@"
foo bar bam
$ echo "$*"
foobarbam
$ unset IFS
$ echo "$*"
foo bar bam
Как видите, заключенная в двойные кавычки переменная-параметр $@
представляет позиционные параметры как отдельные поля, независимо от значения переменной окружения IFS
. Как правило, если вы хотите получить доступ к параметрам, лучше использовать переменную-параметр.