Выбрать главу

root# echo $GROUPS

0

root# echo ${GROUPS[1]}

1

root# echo ${GROUPS[5]}

6

$HOME

домашний каталог пользователя, как правило это /home/username (см. Пример 9-13)

$HOSTNAME

Сетевое имя хоста устанавливается командой hostname во время исполнения инициализирующих сценариев на загрузке системы. Внутренняя переменная $HOSTNAME Bash получает свое значение посредством вызова функции gethostname(). См. так же Пример 9-13.

$HOSTTYPE

тип машины

Подобно $MACHTYPE, идентифицирует аппаратную архитектуру.

bash$ echo $HOSTTYPE

i686

$IFS

разделитель полей во вводимой строке (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

При всем при том следует помнить, что при использовании $IFS пробельные символы обрабатываются несколько иначе, чем все остальные.

Пример 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 можно получить весьма неожиданные результаты.

Начиная с версии 2.05, Bash, в операциях подстановки имен файлов, не делает различий между символами верхнего и нижнего регистров, в диапазонах символов в квадратных скобках. Например,, ls [A-M]* выведет как File1.txt, так и file1.txt. Возврат к общепринятому стандарту поведения шаблонов в квадратных скобках выполняется установкой переменной LC_COLLATE в значение C командой export LC_COLLATE=C в файле /etc/profile и/или ~/.bashrc.

$LC_CTYPE

Эта внутренняя переменная определяет кодировку символов. Используется в операциях подстановки и поиске по шаблону.

$LINENO

Номер строки исполняемого сценария. Эта переменная имеет смысл только внутри исполняемого сценария и чаще всего применяется в отладочных целях.

# *** BEGIN DEBUG BLOCK ***

last_cmd_arg=$_ # Запомнить.

echo "Строка $LINENO: переменная \"v1\" = $v1"

echo "Последний аргумент командной строки = $last_cmd_arg"

# *** END DEBUG BLOCK ***

$MACHTYPE

аппаратная архитектура

Идентификатор аппаратной архитектуры.

bash$ echo $MACHTYPE

i686

$OLDPWD

прежний рабочий каталог ("OLD-Print-Working-Directory")

$OSTYPE

тип операционной системы

bash$ echo $OSTYPE

linux

$PATH

путь поиска, как правило включает в себя каталоги /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, и т.д.

Когда командный интерпретатор получает команду, то он автоматически пытается отыскать соответствующий исполняемый файл в указанном списке каталогов (в переменной $PATH). Каталоги, в указанном списке, должны отделяться друг от друга двоеточиями. Обычно, переменная $PATH инициализируется в /etc/profile и/или в ~/.bashrc (см. Глава 26).