$
Заметьте, что мы задали
$ sh cx сх
в точности так, как сделал бы автоматически интерпретатор, если бы
cx
$ cx сх
А как быть, если нужно работать с несколькими аргументами, например, заставить программу
cx
chmod +x $1 $2 $3 $4 $5 $6 $7 $8 $9
(Это годится только для девяти аргументов, так как конструкция
$10
chmod
С учетом упомянутой выше трудности интерпретатор предоставляет сокращенную запись
$*
cx
chmod +x $*
что является эффективным при любом числе аргументов.
Используя
$*
lc
m
$ cd /usr/you/bin
$ cat lc
#lc: подсчет числа строк в файлах
wc -l $*
$ cat m
#m: точный способ послать почту
mail $*
$
Обе команды можно осмысленно использовать и без аргументов. Если нет аргументов,
$*
wc
mail
$ 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
$
Эти и другие команды, описываемые в настоящей главе, являются командами пользователя, т.е. вы создаете их для себя и помещаете в свой каталог
/bin
shell
Аргументами командного файла не обязательно должны быть имена файлов. Рассмотрим в качестве примера поиск в каталоге, где хранится личный телефонный справочник. Если у вас есть файл с именем
/usr/you/lib/phone-book
dial-a-joke 212-976-3838
dial-a-prayer 212-246-4200
dial santa 212-976-3636
dow jones report 212-976-4141
то для поиска в нем можно воспользоваться командой
grep
lib
grep
411
$ echo 'grep $* /usr/you/lib/phone-book' > 411
$ cx 411
$ 411 joke
dial-a-joke 212-976-3838
$ 411 dial
dial-a-joke 212-976-3838
dial-a-prayer 212-246-4200
dial santa 212-976-3636
$ 411 'dow jones'
grep: can't open jones
$
Последний пример вскрывает потенциальную проблему: хотя
dow jones
411
411
grep
$ grep dow jones /usr/you/lib/phone-book
что, очевидно, неверно.
Один из возможных путей обойти эту проблему основан на том, как интерпретатор трактует кавычки. Хотя все, что заключено в
'...'
"..."
$
\
`...`
$ grep "$*" /usr/you/lib/phone-book
то
$*
grep
$ 411 dow jones
dow jones report 212-976-4141
$
Кстати, можно сделать с помощью флага
-y
grep
411
$ grep -y pattern ...
При наличии флага
-y
Более подробно аргументы команд мы рассмотрим в гл. 5, но одно важное замечание необходимо сделать здесь. Аргумент
$0
cx $0
"cx"
$0
2
3
4