Разбор командной строки
Интерпретатор, получив командную строку, выполняет над ней ряд преобразований, а именно:
Разберем эти действия по этапам.
Псевдонимы (alias). Встроенная команда alias позволяет определять псевдонимы команд. Пример:
% alias mycat 'cat | more'
определяет mycat как псевдоним строки cat | more. Поэтому далее вы вправе пользоваться командой mycat, которая будет раскрыта интерпретатором везде, где вы ее используйте. Это - способ определения коротких имен для длинных составных команд.
Встроенная команда unalias mycat уничтожает ранее введенный псевдоним mycat.
Метасимволы. Метасимволы позволяют кратко записывать целые списки слов (главным образом - имен файлов). Shell рассматривает слово, в котором встречаются метасимволы, как шаблон для составления списка имен файлов:
Наконец, тильда позволяет указать домашний каталог пользователя:
Переменные shell. Слова, начинающиеся с символа $ командный интерпретатор воспринимает как имена переменных. Переменные делятся на переменные окружения (они будут известны всем вызванным из этой shell программам и являются в этом смысле глобальными) и простые переменные.
Встроенная команда set name= value позволяет определить простую переменную с именем name и дать ей значение value. Встретив в командной строке выражение $name интерпретатор заменит его на value. Например,
% set color=blue
% echo $color
выдаст на терминал строчку blue. А
% set color=blue
% echo new$color
даст newblue. Наконец, введя
% set color=blue
% echo ${color}new
получим colornew. Последний пример демонстрирует как надо использовать фигурные скобки для выделения имени переменной из слова (на echo $colornew интерпретатор бы ответил, что переменная colornew не определена.
Команда unset уничтожает ранее определенные переменные.
Чтобы определить переменную равной строке из нескольких слов, заключите ее в простые кавычки. Пример
% set color='blue or red or green'
Простые переменные могут быть массивами слов (что надо отличать от только что рассмотренного случая, когда переменная содержит строку из нескольких слов. Для объявления массива надо использовать круглые скобки:
% set colors=(blue red green)
Теперь команда echo $colors выдаст строку из трех цветов (попробуйте!). Однако вы можете также работать в отдельными элементами массива (элементы нумеруются с нулевого значения), например так:
% echo $colors[2]
(получим green). Количество элементов в массиве содержится в переменной $#colors.
% echo $#colors
даст на терминал цифру 3.
Возможны довольно сложные комбинации с использованием шаблонов, например:
% set files=(m*)
% echo $#files
выдаст число файлов в текущем каталоге, начинающихся с буквы m.
Переменные окружения вызываются точно также как и простые переменные. Разница заключается в способе их определения:
Команда % setenv name value устанавливает переменную окружения с именем name. Обратите внимание на раздражающую разницу в синтаксисе: определяя переменную окружения не надо ставить знак =.
Список всех переменных окружения можно получить с помощью встроенной команды printenv.
Отменить определения переменной окружения можно с помощью unsetenv.
Наконец, для определения массива переменных окружения НЕ используются круглые скобки, а используются двоеточия в качестве разделителей элементов массива:
% setenv MANPATH /usr/man/:/usr/local/man:/usr/man/X11:~/man