Читать книгу 📗 "UNIX — универсальная среда программирования - Керниган Брайан Уилсон"
$ echo -n '-n>'-n$Такое решение некрасиво, но эффективно, к тому же это довольно редкий случай.
Другой подход принят в System V, где команда
echobc$ echo 'Введенная команда: с'Введенная команда: $Хотя при подобном решении не возникает коллизий при получении эха от знака
"-"echoechoИтак, обе реализации команды
echo-nechoВозникает еще один, философский, вопрос: что должна делать команда, если ей не передали аргументов, в частности, следует ли ей выдавать пустую строку или вообще ничего не предпринимать? Как вы уже знаете, все настоящие реализации команды выдают пустую строку, но в ранних версиях все было иначе. По этому поводу велись большие дебаты, а Д. МакИлрой привнес в них даже элемент мистицизма.
Жила-была в стране Нью-Джерси UNIX, прекрасная девушка, к которой приезжали издалека, чтобы полюбоваться ею. Ослепленные чистотой UNIX, все искали ее руки и сердца: одни — за изящество, другие — за изысканную вежливость, третьи — за проворность при выполнении самых изнурительных заданий. Была она от рождения столь великодушна и услужлива, что все женихи остались довольны ею, а ее многочисленное потомство распространилось во все концы земли.
Сама природа покровительствовала UNIX и вторила ей более охотно, чем кому-либо из смертных. Простые люди поражались ее эхом, таким оно было точным и кристально чистым. Они не могли поверить, что ей отвечают те же леса и скалы, которые так искажают их собственные голоса. Когда один нетерпеливый пастушок попросил UNIX: "Пусть эхо ответит ничего", и она послушно открыла рот, эхо промолчало. "Зачем ты открываешь рот?" — спросил пастушок. — "Отныне никогда не открывай его, если эхо должно ответить ничего!" — и UNIX подчинилась.
"Но я хочу совершенного исполнения, даже если эхо отвечает ничего," — потребовал другой, обидчивый, юноша, — "а никакого совершенного эха не получится при закрытом рте". Не желая обидеть никого из них, UNIX согласилась говорить разные "ничего" для нетерпеливого и обидчивого юношей. Она называла "ничего" для обидчивого как '
n'n''n''n''c''n''c'Предскажите, что сделает команда
grepgrep $ grep \grep \$ grep \\grep \\$ grep "$"grep '$' grep '"$'grep ''$ grep "$"Файл, состоящий из таких команд, послужит хорошим материалом для теста, если вы хотите поэкспериментировать.
Как указать
grep'-'-еРассмотрите команду
$ echo */*Может ли она вывести все имена всех каталогов? В каком порядке появятся эти имена?
(Хитрый вопрос.) Как ввести
//Что произойдет в случае ввода команд
$ cat x y >y$ cat x >>xПодумайте, прежде чем броситься их выполнять.
Если вы введете
$ rm *почему команда
rm3.3 Создание новых команд
Теперь, как мы обещали вам в гл. 1, рассмотрим создание новых команд из старых. Имея последовательность команд, которую придется многократно повторять, преобразуем ее для удобства в "новую" команду со своим именем и будем использовать ее как обычную команду. Чтобы быть точными, предположим, что нам предстоит часто подсчитывать число пользователей с помощью конвейера
$ who | wc -l(см. гл. 1), и для этой цели нужна новая программа
nuПервым шагом должно быть создание обычного файла, содержащего
'who | wc -l'$ echo 'who | wc -l' >nu(Что появится в файле
nuКак отмечалось в гл. 1, интерпретатор является точно такой же программой, как редактор,
whowcshnu