$DIRSTACK
содержимое вершины стека каталогов (который управляется командами pushd и popd)
Эта переменная соответствует команде dirs, за исключением того, что dirs показывает полное содержимое всего стека каталогов.
$EDITOR
заданный по-умолчанию редактор, вызываемый скриптом, обычно vi или emacs.
$EUID
$GROUPS
$HOME
$HOSTNAME
$IFS
$MACHTYPE
$OLDPWD
$PATH
$PPID
$PS1
$PWD
$REPLY
\"эффективный\" идентификационный номер пользователя (Effective User ID)
Идентификационный номер пользователя, права которого были получены, возможно с помощью команды su.
$FUNCNAME
имя текущей функции
xyz23 ()
{
echo \"Исполняется функция $FUNCNAME.\" # Исполняется функция xyz23.
}
xyz23
echo \"FUNCNAME = $FUNCNAME\" # FUNCNAME =
# Пустое (Null) значение за пределеми функций.
$GLOBIGNORE
Перечень шаблонных символов, которые будут проигнорированы при выполнении подстановки имен файлов (globbing) .
группы, к которым принадлежит текущий пользователь
Это список групп (массив) идентификационных номеров групп для текущего пользователя, как эо записано в /etc/passwd.
root# echo $GROUPS
0
root# echo ${GROUPS[1]}
1
root# echo ${GROUPS[5]}
6
домашний каталог пользователя, как правило это /home/username (см. Пример 9-13)
Сетевое имя хоста устанавливается командой hostname во время исполнения инициализирующих сценариев на загрузке системы. Внутренняя переменная $HOSTNAME Bash получает свое значение посредством вызова функции gethostname(). См. так же Пример 9-13.
$HOSTTYPE
тип машины
Подобно $MACHTYPE, идентифицирует аппаратную архитектуру.
bash$ echo $HOSTTYPE
i686
разделитель полей во вводимой строке (IFS -- Input Field Separator)
По-умолчанию -- пробельный символ (пробел, табуляция и перевод строки), но может быть изменен, например, для разбора строк, в которых отдельные поля разделены запятыми. Обратите внимание: при составлении содержимого переменной $*, Bash использует первый символ из $IFS для разделения аргументов. См. Пример 5-1.
bash$ echo $IFS | cat -vte
$
bash$ bash -c \'set w x y z; IFS=\":-;\"; echo \"$*\"\'
w:x:y:z
Пример 9-1. $IFS и пробельные символы
#!/bin/bash
# При использовании $IFS, пробельные символы обрабатываются иначе, чем все остальные.
output_args_one_per_line()
{
for arg
do echo \"[$arg]\"
done
}
echo; echo \"IFS=\\\" \\\"\"
echo \"-------\"
IFS=\" \"
var=\" a b c \"
output_args_one_per_line $var # output_args_one_per_line `echo \" a b c \"`
#
# [a]
# [b]
# [c]
echo; echo \"IFS=:\"
echo \"-----\"
IFS=:
var=\":a::b:c:::\" # То же самое, только пробелы зменены символом \":\".
output_args_one_per_line $var
#
# []
# [a]
# []
# [b]
# [c]
# []
# []
# []
# То же самое происходит и с разделителем полей \"FS\" в awk.
# Спасибо Stephane Chazelas.
echo
exit 0
(Спасибо S. C., за разъяснения и примеры.)
$LC_COLLATE
Чаще всего устанавливается в .bashrc или /etc/profile, эта переменная задает порядок сортировки символов, в операциях подстановки имен файлов и в поиске по шаблону. При неверной настройке переменной LC_COLLATE можно получить весьма неожиданные результаты.
$LC_CTYPE
Эта внутренняя переменная определяет кодировку символов. Используется в операциях подстановки и поиске по шаблону.
$LINENO
Номер строки исполняемого сценария. Эта переменная имеет смысл только внутри исполняемого сценария и чаще всего применяется в отладочных целях.
# *** BEGIN DEBUG BLOCK ***
last_cmd_arg=$_ # Запомнить.
echo \"Строка $LINENO: переменная \\\"v1\\\" = $v1\"
echo \"Последний аргумент командной строки = $last_cmd_arg\"
# *** END DEBUG BLOCK ***
аппаратная архитектура
Идентификатор аппаратной архитектуры.
bash$ echo $MACHTYPE
i686
прежний рабочий каталог (\"OLD-Print-Working-Directory\")
$OSTYPE
тип операционной системы
bash$ echo $OSTYPE
linux
путь поиска, как правило включает в себя каталоги /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, и т.д.
Когда командный интерпретатор получает команду, то он автоматически пытается отыскать соответствующий исполняемый файл в указанном списке каталогов (в переменной $PATH). Каталоги, в указанном списке, должны отделяться друг от друга двоеточиями. Обычно, переменная $PATH инициализируется в /etc/profile и/или в ~/.bashrc (см. Глава 26).
bash$ echo $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/sbin:/usr/sbin
Инструкция PATH=${PATH}:/opt/bin добавляет каталог /opt/bin в конец текущего пути поиска. Иногда может оказаться целесообразным, внутри сценария, временно добавить какой-либо каталог к пути поиска. По завершении работы скрипта, эти изменения будут утеряны (вспомните о том, что невозможно изменить переменные окружения вызывающего процесса).
$PIPESTATUS
Код возврата канала (конвейера). Интересно, что это не то же самое, что код возврата последней исполненной команды.
bash$ echo $PIPESTATUS
0
bash$ ls -al | bogus_command
bash: bogus_command: command not found
bash$ echo $PIPESTATUS
141
bash$ ls -al | bogus_command
bash: bogus_command: command not found
bash$ echo $?
127
tcsh% bash
bash$ who | grep nobody | sort
bash$ echo ${PIPESTATUS[*]}
0
Если поместить эти строки в сценарий и исполнить его, то будут выведены верные значения 0 1 0.
Спасибо Wayne Pollock за замечания и предоставленный пример.
Переменная $PPID хранит PID (идентификатор) родительского процесса.[ 19 ]
Сравните с командой pidof.
prompt, приглашение командной строки.
$PS2
Вторичное приглашение командной строки, выводится тогда, когда от пользователя ожидается дополнительный ввод. Отображается как \">\".
$PS3
Третичное приглашение (prompt), выводится тогда, когда пользователь должен сделать выбор в операторе select (см. Пример 10-29).
$PS4
Приглашение (prompt) четвертого уровня, выводится в начале каждой строки вывода тогда, когда сценарий вызывается с ключом -x. Отображается как \"+\".
рабочий (текущий) каталог
Аналог встроенной команды pwd.
#!/bin/bash
E_WRONG_DIRECTORY=73
clear # Очистка экрана.
TargetDirectory=/home/bozo/projects/GreatAmericanNovel
cd $TargetDirectory
echo \"Удаление файлов в каталоге $TargetDirectory.\"
if [ \"$PWD\" != \"$TargetDirectory\" ]
then # Защита от случайного удаления файлов не в том каталоге.
echo \"Неверный каталог!\"
echo \"Переменная $PWD указывает на другой каталог!\"
exit $E_WRONG_DIRECTORY
fi
rm -rf *
rm .[A-Za-z0-9]* # удалить \"скрытые\" файлы (начинающиеся с \".\")
# rm -f .[^.]* ..?* удалить файлы, чьи имена начинаются с нескольких точек.
# (shopt -s dotglob; rm -f *) тоже работает верно.
# Спасибо S.C. за замечание.
# Имена файлов могут содержать любые символы из диапазона 0-255, за исключением \"/\".
# Оставляю вопрос удаления файлов с \"необычными\" символами для самостоятельного изучения.
# Здесь можно вставить дополнительные действия, по мере необходимости.
echo
echo \"Конец.\"
echo \"Файлы, из каталога $TargetDirectory, удалены.\"
echo
exit 0
переменная по-умолчанию, куда записывается ввод пользователя, выполненный с помощью команды read если явно не задана другая переменная. Так же может использоваться в операторе select, для построения меню выбора.
#!/bin/bash
echo
echo -n \"Ваше любимое растение? \"
read
echo \"Ваше любимое растение: $REPLY.\"
# REPLY хранит последнее значение, прочитанное командой \"read\" тогда, и только тогда
#+ когда команде \"read\" не передается имя переменной.
echo
echo -n \"Ваш любимый фрукт? \"
read fruit
echo \"Ваш любимый фрукт $fruit.\"
echo \"но...\"
echo \"Значение переменной \\$REPLY осталось равным $REPLY.\"
# Переменная $REPLY не была перезаписана потому, что
# следующей команде \"read\", в качестве аргумента была передана переменная $fruit
echo
exit 0
$SECONDS
Время работы сценария в секундах.
#!/bin/bash
# Автор: Mendel Cooper