Встроенные команды - часть 2
shift [n]
Формальные аргументы, начиная с (n+1)-го, переименовываются в $1 и т.д. По умолчанию n=1.
К числу обычных встроенных команд относятся:
cd [каталог]
Сделать текущим заданный каталог. Если каталог не указан, используется значение переменной окружения HOME.
pwd
Выводит имя текущего каталога.
read [переменная ...]
Со стандартного ввода читается одна строка и делится на поля; первое поле присваивается первой переменной, второе - второй и т.д., причем последовательность всех оставшихся полей присваивается последней переменной. Исходная строка имеет продолжение, если в конце ее стоит последовательность \перевод_строки. Символы, отличные от перевода строки, также могут быть экранированы с помощью \, который удаляется перед присваиванием полей. Возвращается нулевой код завершения, если только не встретился конец файла.
Некоторые пояснения. С помощью команды exec осуществляется смена программы текущего процесса. Например, если пользователь привык работать в командном интерпретаторе bash, он может перейти туда по команде
exec bash
При этом обычный shell бесследно исчезнет.
Аргументы специальной встроенной команды eval обрабатываются дважды: когда исходную строку интерпретирует shell и когда работает сама eval. Так, после выполнения строк
a=1 b=a eval c='$'$b echo $c
на стандартный вывод будет выдана единица, поскольку аргументом eval будет оператор присваивания c=$a.
Если файл data содержит строку
1 2 3 4 5
то после выполнения специальной встроенной команды read
read a b c echo $c $b $a
на стандартный вывод будет выдан следующий результат:
3 4 5 2 1
Текст "3 4 5" (остаток строки) стал значением переменной c.
Команду shift используют при последовательной обработке аргументов shell-процедур. Например, если требуется выдать аргументы, которые являются именами существующих обычных файлов, употребляют цикл вида (см. листинг 2.28):
while [ "$1" ] do [ -f $1 ] && echo $1 shift done
Листинг 2.28. Пример использования специальной встроенной команды shift.