Э. Сивер, С. Спейнауэр, С. Фиггинс, Дж. П. Хекман - Linux cправочник - 3-е издание (1114666), страница 85
Текст из файла (страница 85)
Применяется дляэкранирования символов ", $ и " в последовательности, заключенной вдвойные кавычки. Часто применяется для экранирования собственносимвола \, пробелов или символов новой строки. Символ доступа к журналу команд (обычно !) необходимо экранировать всегда.Примеры% echo 'Одинарные кавычки "защищают" двойные кавычки'Одинарные кавычки "защищают" двойные кавычкиГлава 8. Интерпретаторы csh и tcsh580X echo "Ну, разве это не \"особый случай\"?"Ну, разве это не "особый случай"?* echo "У Вас 'Is | we -1' файла в каталоге 'pwd'У Вас 43 файла в каталоге /home/bob% echo "Значением \$х является $х"Значением $х является 100формы командКомандаДействиеcmd &Выполнить команду в фоновом режимеcrndl ; and2Последовательность команд; выполнить команды, перечисленные встроке(cmdl ; cmd2)«Дополнительный интерпретатор»; считать команды cmdl и cmd2 одной группой командcmdl | cmd2Конвейер; использовать вывод команды спкП в качестве ввода команды cmd2cmdl *cmd2*Подстановка команд; результат работы команды cmd2 передается в качестве аргументов команде cmdlcmdl | | cmd2Логическое ИЛИ; команда cmd2 выполняется только тогда, когда выполнение cmd 1 завершилось неудачейстсП && cmd2Логическое И; команда cmd2 выполняется только тогда, когда успешно выполнилась команда cmd 1Примеры% nroff file > output &X cd; Is% (date; who; pwd) > logfileX sort file | pr -3 | Ip% vi 'grep -1 ifdef *.c'X egrep '(yes|no)' 'cat list'X grep XX file && Ip fileX grep XX file || echo "XX not found"Фоновое форматирование текстаПоследовательное выполнение командПеренаправление всего вывода в файлСортировка файла, разбивка на страницы, затем печатьРедактировать файлы, найденные grepОпределить список файлов для поискаПечать файла, содержащего заданныйтекстОтображение сообщения об ошибке, еслитекст XX не найденСинтаксис581Формы перенаправленияФайловыйдескрипторИмяПринятоесокращениеТипичноеустройство0Стандартный поток вводаstdinКлавиатура1Стандартный поток выводаstdoutТерминал2Стандартный поток ошибокstderrТерминалИсточник ввода и цель вывода могут быть переопределены при помощи команд перенаправления, перечисленных в следующих разделах.Простое перенаправлениеКомандаДействиесгиб > fileПеренаправить вывод команды сто в указанный файл fHe (перезаписывается)cmd >! fileТо же, но перезапись даже при установленном режиме noclobbercmd » fileПеренаправление вывода в файл file (добавление к существующемусодержимому)cmd »! fileТо же, даже при установленном режиме noclobbercmd < fileПеренаправление ввода команды из файла filecmd « textЧтение со стандартного ввода вплоть до появления строки text (строка может быть значением переменной интерпретатора).
Ввод обычнопроисходит на терминале или в процессе выполнения сценария. Какправило, такой синтаксис используют команды cat, echo, ex и sed. Если текст text заключен в кавычки, не происходит подстановки значений переменных для стандартного ввода, подстановок команд и т. д.1Множественное перенаправлениеКомандаДействиеcmd>& fileПеренаправить стандартный вывод и поток ошибок в указанныйфайлcmd>&! fileТо же, даже при установленном режиме noclobbercmd»& fileДобавление стандартного вывода и потока ошибок к содержимомууказанного файлаcmd»&\ fileТо же, даже при установленном режиме noclobbercmdl \&cmd2Перенаправление стандартного вывода и потока ошибок через конвейер(cmd > f1) >& f2 Перенаправление стандартного вывода в файл f 7, а стандартного потока ошибок в файл f2Глава 8.
Интерпретаторы csh и tcsh582КомандаДействиеand | tee files Перенаправить результат работы команды на стандартный вывод(обычно терминал) и в файлы files (см. примеры в описании команды tee в главе 3)ПримерыСкопировать parti в bookДобавить part2 и parts в тот же файл,что и partiПолучить текст сообщения из reportmail tim < reportСохранить все сообщения, включаяcc calc.c >& error. outсообщения об ошибкахПерезаписать старый файл% cc newcalc.c >&! error .outX grep Unix ch* |& prПередать все сообщения (включая сообщения об ошибках) через конвейерX (find / -print > filelist) >& no_access Отделить сообщения об ошибках отсписка файлов% sed ' s / ~ / X X / ' « "END_ARCHIVE"Ввести текст до слова END .ARCHIVEThis is often how a shell archive is "wrapped",bundling text for distribution.
You would normallyrun sed from a shell program, not from the command line."END ARCHIVE"cat parti > bookcat part2 parts » bookПеременныеВ этом разделе представлены следующие темы:••Подстановка значений переменныхМодификаторы переменных•Предопределенные переменные интерпретатора•Форматирование переменной приглашения• Пример файла .cshrc•Переменные окруженияПодстановка значений переменных-^В приводимых ниже вариантах подстановок фигурные скобки необязательны, за исключением тех случаев, когда имя переменной необходимо отделить от следующего символа, который иначе считался бы частью имени.Переменная Действие${var}Значение переменной var${var[i]}Выбрать слово (или слова) в i-й позиции строки var.
i может бытьобычным числом, диапазоном в виде m-n, диапазоном в виде —п (отсутствующее m принимает значение 1), диапазоном в виде m - (отсутствую-583ПеременныеПеременная Действиещее п подразумевает все следующие слова) либо символом * (выборвсех слов). 1 также может быть переменной, принимающей одно изэтих значений.${#i'ar}Количество слов в va r${#argv}Количество аргументов$0Имя программы${argv[n]}Отдельный аргумент командной строки (позиционный параметр);1 <и<9Идентично $ { a r g v [ n ] }Все аргументы командной строкиИдентично $ a r g v [ * ]$argv[$#3rgv] Последний аргумент1, если переменная va г установлена, и 0 - в противном случаеНомер процесса текущего интерпретатора; полезно при необходимости создания временных файлов с уникальными именами1, если параметр пате установлен, О - в противном случае1, если введенное имя файла существует, О - в противном случае (вдиалоговом режиме всегда 0)ПримерыСортировка аргументов от третьего до последнего и сохранение результата вфайле с уникальным для этого процесса именем:sort $argv[3-] > tmp.$$Обработать команды .cshrc только в том случае, если интерпретатор работаетв диалоговом режиме (т.
е. переменная prompt должна быть установлена):if ($?prompt) thenset commandsalias commandsetc.endifМодификаторы переменныхЗа исключением вариантов $lvar, $$ и $?0, подстановка переменных можетиметь дополнительный модификатор. При использовании фигурных скобокмодификатор записывается внутри них.:гВернуть корень переменной (содержимое до последней точки).584:еГлава 8. Интерпретаторы csh и tcshВернуть расширение переменной.: h Вернуть заголовок переменной (имя каталога в полном имени файла).: t Вернуть хвост переменной (за последним символом /).: g г Вернуть все корни.: де Вернуть все расширения.: gh Вернуть все заголовки.:gt Вернуть все хвосты.:q:хЗаключить переменную (список слов) в кавычки, сохраняя разделениеэлементов.
Модификатор полезен, если необходимо хранить именафайлов, содержащие специальные символы, которые не следует расширять.Заключить шаблон в кавычки, расширяя его в список слов.Примеры использования модификаторов путейВ следующей таблице приведены примеры использования модификаторовпутей для переменной:set aa=(/progs/num.c /book/chap.ps)Часть переменнойЗаписьРезультатОбычная переменная echo $aa/progs/num.cВторой кореньecho $aa[2]: г/book/chapВторой заголовокecho $aa[2]:h/bookВторой хвостecho $aa[2]:tchap.psВторое расширениеecho $aa[2]:epsКореньecho $aa: r/progs/пит/book/chap.psВсе корниecho $ a a : g r/progs/пит/book/chapЗаголовокecho $aa:h/progsВсе заголовкиecho $aa:gh/progs /bookХвостecho $aa:tnum.c /book/chap.psВсе хвостыecho $aa:gtnum.c chap.psРасширениеecho $aa:eс /book/chap.psВсе расширенияecho $aa:gecps/book/chap.ps/book/chap.psПримеры использования экранирующих модификаторовБез экранирования интерпретатор расширяет специальные символы в именах файлов, представляя содержимое текущего каталога:Переменные585X set a="[a-z]*" A="[A-Z]«"% echo "$a" "$A"[a-z]* [A-Z]*X echo $a $Aat cc m4 Book DocXecho $a:x $A[a-z]* Book DocX set d=($a:q $A:q)X echo $dat cc n4 Book DocX echo $d:q[a-z]* [A-Z]*X echo $d[1] +++ $d[2]at cc m4 +++ Book DocX echo $d[1]:q[a-z]*Предопределенные переменные интерпретатораПеременные могут устанавливаться двумя способами.