Читать книгу 📗 "UNIX — универсальная среда программирования - Керниган Брайан Уилсон"
$Заметьте, что мы задали
$ sh cx схв точности так, как сделал бы автоматически интерпретатор, если бы
cx$ cx схА как быть, если нужно работать с несколькими аргументами, например, заставить программу
cxchmod +x $1 $2 $3 $4 $5 $6 $7 $8 $9(Это годится только для девяти аргументов, так как конструкция
$10chmodС учетом упомянутой выше трудности интерпретатор предоставляет сокращенную запись
$*cxchmod +x $*что является эффективным при любом числе аргументов.
Используя
$*lcm$ cd /usr/you/bin$ cat lc#lc: подсчет числа строк в файлахwc -l $*$ cat m#m: точный способ послать почтуmail $*$Обе команды можно осмысленно использовать и без аргументов. Если нет аргументов,
$*wcmail$ lc /usr/you/bin/* 1 /usr/you/bin/cx 2 /usr/you/bin/lc 2 /usr/you/bin/m 1 /usr/you/bin/nu 2 /usr/you/bin/what 1 /usr/you/bin/where 9 total$ ls /usr/you/bin | lc 6$Эти и другие команды, описываемые в настоящей главе, являются командами пользователя, т.е. вы создаете их для себя и помещаете в свой каталог
/binshellАргументами командного файла не обязательно должны быть имена файлов. Рассмотрим в качестве примера поиск в каталоге, где хранится личный телефонный справочник. Если у вас есть файл с именем
/usr/you/lib/phone-bookdial-a-joke 212-976-3838dial-a-prayer 212-246-4200dial santa 212-976-3636dow jones report 212-976-4141то для поиска в нем можно воспользоваться командой
greplibgrep411$ echo 'grep $* /usr/you/lib/phone-book' > 411$ cx 411$ 411 jokedial-a-joke 212-976-3838$ 411 dialdial-a-joke 212-976-3838dial-a-prayer 212-246-4200dial santa 212-976-3636$ 411 'dow jones'grep: can't open jones$Последний пример вскрывает потенциальную проблему: хотя
dow jones411411grep$ grep dow jones /usr/you/lib/phone-bookчто, очевидно, неверно.
Один из возможных путей обойти эту проблему основан на том, как интерпретатор трактует кавычки. Хотя все, что заключено в
'...'"..."$`...`$ grep "$*" /usr/you/lib/phone-bookто
$*grep$ 411 dow jonesdow jones report 212-976-4141$Кстати, можно сделать с помощью флага
-ygrep411$ grep -y pattern ...При наличии флага
-yБолее подробно аргументы команд мы рассмотрим в гл. 5, но одно важное замечание необходимо сделать здесь. Аргумент
$0cx $0"cx"$0234