Екскурс в команду echo

Команда echo виводить заключний символ роздільник рядків, хоча в явному вигляді така вимога не існує Конструкція коман-

ди була б більш розумною і «чистої», якби echo виводила тільки те, що потрібно Тоді було б простіше видавати запрошення на введення:

$ pure-echo  Enter  a command:

Enter  a command:$                Ні замикаючого роздільник рядків

Але в такому варіанті є й недолік – дуже часто виявляється, що перехід на новий рядок після завершення команди бажаний, а його відсутність викликає необхідність додаткового введення:

$ pure-echo  Hello

&gt

Hello

$

За замовчуванням команда повинна виконувати ті функції, які наи більш часто використовуються, тому справжня команда echo автоматично додає заключний роздільник рядків

Але що робити користувачу, якому не потрібен цей роздільник У сьомій версії є спеціальний параметр-n, який прибирає останній роздільник рядків:

$ echo -n  Enter  a command:

Enter  a command:$                Запрошення на введення на тому ж рядку

$ echo –

–                                             Тільки –n має спеціальне значення

$

Існує й трюк, що дозволяє вивести-n, а слідом – роздільник рядків:

$ echo -n  -n

&gt

–n

$

Виглядає потворно, але працює, до того ж така ситуація дуже рідко зустрічається

System V пропонує команді echo інший підхід для знищення останнього у роздільник рядків – інтерпретувати Сі-подібні escape-послідовності, такі як \ b для символу повернення на одну позицію (backspace) і \ c (відсутній в Сі) для знищення останнього роздільник рядків:

$ echo Enter a command: \ c Версія System V

Enter  a command:$

Хоча застосування цього механізму не породжує плутанину з виведенням на термінал знака мінус, зате є інші проблеми Справа в тому, що команда echo часто застосовується для діагностики, а зворотна коса

риса інтерпретується такою великою кількістю команд, що якщо цим займеться і echo, все тільки ще більше заплутається

Отже, обидві конструкції мають сильні і слабкі сторони У книзі буде використовуватися версія (-n) для сьомої версії, так що якщо ваша програма echo підпорядковується іншим умовам, деякі програми можуть зажадати незначного доопрацювання

Є і ще один філософське питання: що команда echo повинна робити, якщо у неї немає аргументів, точніше, чи повинна вона друкувати пробіл або не повинна взагалі нічого робити Всі сучасні реалізації echo (відомі авторам) друкують пробіл, а ось більш ранні версії не робили цього, колись з цього приводу навіть велися запеклі суперечки Даг Мак-Ілрой (Doug McIlroy) привніс в обговорення цієї теми трохи містицизму

UNIX та Ехо

Жила-була в королівстві Нью-Джерсі дівчина UNIX Здалеку зїжджалися вчені, щоб подивитися на неї, так вона була чудова Засліплені її чистотою, все намагалися завое вать її серце одних залучали її грація і непорочність, інших – вишукані манери, третій – спритність у виконанні важких, обтяжливих завдань, які рідко виконувалися і в більш сприятливих умовах У дівчини було таке добре серце і розуміючий вдачу, що UNIX прийняла всіх своїх шанувальників, крім найбагатших Незабаром зявилася безліч їхніх нащадків, вони жили і процвітали в усіх куточках землі

Сама природа посміхалася UNIX і відповідала їй охочіше, ніж іншим смертним Простий народ, який мало що розумів у вищих матеріях, насолоджувався її відлуння (echo), Воно було таким точним і кристально чистим, що люди насилу вірили в те, що дівчині відповідають ті ж самі ліси і гори, які так спотворюють їх власні крики А поступлива UNIX отримувала досконале відлуння у відповідь на всі свої слова

Коли один нетерплячий залицяльник сказав UNIX: «Я хочу почути відлуння мовчання», дівчина слухняно розімкнула уста, і луна відповіло їй

Молодий чоловік сказав: «Навіщо ти відкриваєш рот Ніколи більше не роби цього, якщо мається на увазі, що ти відібється мовчання »І UNIX послухалася

Інший юнак, дуже вразливий, просив: «Мені б так хотілося, щоб виконання було досконалим, навіть коли ти викликаєш відлуння у відповідь на мовчання, а вчинене луна не може зявитися із закритого рота » UNIX не хотіла нікого ображати, тому вона погодилася говорити різні «нічого» для чутливих-

тельного і нетерплячого молодих людей Вона назвала «нічого» для чутливого юнака «\ n»

Але тепер, коли дівчина говорила «\ n», вона вже насправді не мовчала, так що їй доводилося відкривати рот двічі: спочатку – щоб сказати «\ n», а потім, щоб сказати «нічого» Це не сподобалося вразливому юнакові, який сказав

«Твоє \ n звучить для мене, як справжнє« нічого », але от другий все псує Мені б хотілося, щоб одного з них не було » Тоді UNIX, яка не могла нікого залишити скривдженим, погодилася скасувати деякі відлуння, вона назвала цю операцію

«\ C» Тепер чутливий молода людина могла почути вчинене відображення мовчання, попросивши «\ n» і «\ c» разом Але, кажуть, він помер від надмірностей в умовних позначеннях,

так і не почувши жодного скоєного луни

Вправа 33 Спрогнозуйте, що робитиме кожна з пере численних нижче команд grep, потім перевірте свої припущення:

grep  \$               grep  \\ grep  \\$             grep  \\\\ grep  \\\$           grep  &quot\

Команда echo виводить заключний символ роздільник рядків, хоча в явному вигляді така вимога не існує. Конструкція коман-

ди була б більш розумною і «чистої», якби echo виводила тільки те, що потрібно. Тоді було б простіше видавати запрошення на введення:

$ pure-echo  Enter  a command:

Enter  a command:$                Ні замикаючого роздільник рядків

Але в такому варіанті є й недолік – дуже часто виявляється, що перехід на новий рядок після завершення команди бажаний, а його відсутність викликає необхідність додаткового введення:

$ pure-echo  ‘Hello!

>

Hello!

$

За замовчуванням команда повинна виконувати ті функції, які наи більш часто використовуються, тому справжня команда echo автоматично додає заключний роздільник рядків.

Але що робити користувачу, якому не потрібен цей роздільник? У сьомій версії є спеціальний параметр-n, який прибирає останній роздільник рядків:

$ echo -n  Enter  a command:

Enter  a command:$                Запрошення на введення на тому ж рядку

$ echo –

–                                             Тільки –n має спеціальне значення

$

Існує й трюк, що дозволяє вивести-n, а слідом – роздільник рядків:

$ echo -n  ‘-n

>

–n

$

Виглядає потворно, але працює, до того ж така ситуація дуже рідко зустрічається.

System V пропонує команді echo інший підхід для знищення останнього у роздільник рядків – інтерпретувати Сі-подібні escape-послідовності, такі як \ b для символу повернення на одну позицію (backspace) і \ c (відсутній в Сі) для знищення останнього роздільник рядків:

$ echo ‘Enter a command: \ c’ Версія System V

Enter  a command:$

Хоча застосування цього механізму не породжує плутанину з виведенням на термінал знака мінус, зате є інші проблеми. Справа в тому, що команда echo часто застосовується для діагностики, а зворотна коса

риса інтерпретується такою великою кількістю команд, що якщо цим займеться і echo, все тільки ще більше заплутається.

Отже, обидві конструкції мають сильні і слабкі сторони. У книзі буде використовуватися версія (-n) для сьомої версії, так що якщо ваша програма echo підпорядковується іншим умовам, деякі програми можуть зажадати незначного доопрацювання.

Є і ще один філософське питання: що команда echo повинна робити, якщо у неї немає аргументів, точніше, чи повинна вона друкувати пробіл або не повинна взагалі нічого робити? Всі сучасні реалізації echo (відомі авторам) друкують пробіл, а ось більш ранні версії не робили цього, колись з цього приводу навіть велися запеклі суперечки. Даг Мак-Ілрой (Doug McIlroy) привніс в обговорення цієї теми трохи містицизму.

UNIX та Ехо

Жила-була в королівстві Нью-Джерсі дівчина UNIX. Здалеку з’їжджалися вчені, щоб подивитися на неї, так вона була чудова. Засліплені її чистотою, все намагалися завое вать її серце; одних залучали її грація і непорочність, інших – вишукані манери, третій – спритність у виконанні важких, обтяжливих завдань, які рідко виконувалися і в більш сприятливих умовах. У дівчини було таке добре серце і розуміючий вдачу, що UNIX прийняла всіх своїх шанувальників, крім найбагатших. Незабаром з’явилася безліч їхніх нащадків, вони жили і процвітали в усіх куточках землі.

Сама природа посміхалася UNIX і відповідала їй охочіше, ніж іншим смертним. Простий народ, який мало що розумів у вищих матеріях, насолоджувався її відлуння (echo), Воно було таким точним і кристально чистим, що люди насилу вірили в те, що дівчині відповідають ті ж самі ліси і гори, які так спотворюють їх власні крики. А поступлива UNIX отримувала досконале відлуння у відповідь на всі свої слова.

Коли один нетерплячий залицяльник сказав UNIX: «Я хочу почути відлуння мовчання», дівчина слухняно розімкнула уста, і луна відповіло їй.

Молодий чоловік сказав: «Навіщо ти відкриваєш рот? Ніколи більше не роби цього, якщо мається на увазі, що ти відіб’ється мовчання! »І UNIX послухалася.

Інший юнак, дуже вразливий, просив: «Мені б так хотілося, щоб виконання було досконалим, навіть коли ти викликаєш відлуння у відповідь на мовчання, а вчинене луна не може з’явитися із закритого рота ». UNIX не хотіла нікого ображати, тому вона погодилася говорити різні «нічого» для чутливих-

тельного і нетерплячого молодих людей. Вона назвала «нічого» для чутливого юнака «\ n».

Але тепер, коли дівчина говорила «\ n», вона вже насправді не мовчала, так що їй доводилося відкривати рот двічі: спочатку – щоб сказати «\ n», а потім, щоб сказати «нічого». Це не сподобалося вразливому юнакові, який сказав

«Твоє \ n звучить для мене, як справжнє« нічого », але от другий все псує. Мені б хотілося, щоб одного з них не було ». Тоді UNIX, яка не могла нікого залишити скривдженим, погодилася скасувати деякі відлуння, вона назвала цю операцію

«\ C». Тепер чутливий молода людина могла почути вчинене відображення мовчання, попросивши «\ n» і «\ c» разом. Але, кажуть, він помер від надмірностей в умовних позначеннях,

так і не почувши жодного скоєного луни.

Вправа 3.3. Спрогнозуйте, що робитиме кожна з пере численних нижче команд grep, потім перевірте свої припущення:

grep  \$               grep  \\ grep  \\$             grep  \\\\ grep  \\\$           grep  "\$" grep  ‘\$’           grep  ‘"$’ grep  ‘\’$’         grep  "$"

Файл, що містить самі ці команди, являє собою гарну сукупність тестових даних, яка може стати в нагоді для даль нейших експериментів. ~

Вправа 3.4. Як домогтися, щоб команда grep здійснювала пошук за шаблоном, що починається з «-»? Чому не допомагає висновок аргументу в лапки? Підказка: досліджуйте параметр-e. ~

Вправа 3.5. Розглянемо

$ echo */*

Виводить така команда всі імена з усіх каталогів? У якому порядку виводяться імена? ~

Вправа 3.6 (Складне питання). Яким чином ввести / в ім’я фай ла (так, щоб цей символ не сприймався як розділяє ком тами імені)? ~

Вправа 3.7. Що відбудеться в результаті

$ cat  x y >y

і

$ cat  x >>x

Подумайте, перш ніж кидатися до комп’ютера. ~

Вправа 3.8. Чому, якщо користувач вводить

$ rm *

команда rm не може попередити його про те, що він намагається видалити всі свої файли? ~

Джерело: Керниган Б., Пайк Р., UNIX. Програмне оточення. – Пер. з англ. – СПб: Символ-Плюс, 2003. – 416 с., Мул.

quot grep  \$           grep  &quot$ grep  \$         grep  &quot

Команда echo виводить заключний символ роздільник рядків, хоча в явному вигляді така вимога не існує. Конструкція коман-

ди була б більш розумною і «чистої», якби echo виводила тільки те, що потрібно. Тоді було б простіше видавати запрошення на введення:

$ pure-echo  Enter  a command:

Enter  a command:$                Ні замикаючого роздільник рядків

Але в такому варіанті є й недолік – дуже часто виявляється, що перехід на новий рядок після завершення команди бажаний, а його відсутність викликає необхідність додаткового введення:

$ pure-echo  ‘Hello!

>

Hello!

$

За замовчуванням команда повинна виконувати ті функції, які наи більш часто використовуються, тому справжня команда echo автоматично додає заключний роздільник рядків.

Але що робити користувачу, якому не потрібен цей роздільник? У сьомій версії є спеціальний параметр-n, який прибирає останній роздільник рядків:

$ echo -n  Enter  a command:

Enter  a command:$                Запрошення на введення на тому ж рядку

$ echo –

–                                             Тільки –n має спеціальне значення

$

Існує й трюк, що дозволяє вивести-n, а слідом – роздільник рядків:

$ echo -n  ‘-n

>

–n

$

Виглядає потворно, але працює, до того ж така ситуація дуже рідко зустрічається.

System V пропонує команді echo інший підхід для знищення останнього у роздільник рядків – інтерпретувати Сі-подібні escape-послідовності, такі як \ b для символу повернення на одну позицію (backspace) і \ c (відсутній в Сі) для знищення останнього роздільник рядків:

$ echo ‘Enter a command: \ c’ Версія System V

Enter  a command:$

Хоча застосування цього механізму не породжує плутанину з виведенням на термінал знака мінус, зате є інші проблеми. Справа в тому, що команда echo часто застосовується для діагностики, а зворотна коса

риса інтерпретується такою великою кількістю команд, що якщо цим займеться і echo, все тільки ще більше заплутається.

Отже, обидві конструкції мають сильні і слабкі сторони. У книзі буде використовуватися версія (-n) для сьомої версії, так що якщо ваша програма echo підпорядковується іншим умовам, деякі програми можуть зажадати незначного доопрацювання.

Є і ще один філософське питання: що команда echo повинна робити, якщо у неї немає аргументів, точніше, чи повинна вона друкувати пробіл або не повинна взагалі нічого робити? Всі сучасні реалізації echo (відомі авторам) друкують пробіл, а ось більш ранні версії не робили цього, колись з цього приводу навіть велися запеклі суперечки. Даг Мак-Ілрой (Doug McIlroy) привніс в обговорення цієї теми трохи містицизму.

UNIX та Ехо

Жила-була в королівстві Нью-Джерсі дівчина UNIX. Здалеку з’їжджалися вчені, щоб подивитися на неї, так вона була чудова. Засліплені її чистотою, все намагалися завое вать її серце; одних залучали її грація і непорочність, інших – вишукані манери, третій – спритність у виконанні важких, обтяжливих завдань, які рідко виконувалися і в більш сприятливих умовах. У дівчини було таке добре серце і розуміючий вдачу, що UNIX прийняла всіх своїх шанувальників, крім найбагатших. Незабаром з’явилася безліч їхніх нащадків, вони жили і процвітали в усіх куточках землі.

Сама природа посміхалася UNIX і відповідала їй охочіше, ніж іншим смертним. Простий народ, який мало що розумів у вищих матеріях, насолоджувався її відлуння (echo), Воно було таким точним і кристально чистим, що люди насилу вірили в те, що дівчині відповідають ті ж самі ліси і гори, які так спотворюють їх власні крики. А поступлива UNIX отримувала досконале відлуння у відповідь на всі свої слова.

Коли один нетерплячий залицяльник сказав UNIX: «Я хочу почути відлуння мовчання», дівчина слухняно розімкнула уста, і луна відповіло їй.

Молодий чоловік сказав: «Навіщо ти відкриваєш рот? Ніколи більше не роби цього, якщо мається на увазі, що ти відіб’ється мовчання! »І UNIX послухалася.

Інший юнак, дуже вразливий, просив: «Мені б так хотілося, щоб виконання було досконалим, навіть коли ти викликаєш відлуння у відповідь на мовчання, а вчинене луна не може з’явитися із закритого рота ». UNIX не хотіла нікого ображати, тому вона погодилася говорити різні «нічого» для чутливих-

тельного і нетерплячого молодих людей. Вона назвала «нічого» для чутливого юнака «\ n».

Але тепер, коли дівчина говорила «\ n», вона вже насправді не мовчала, так що їй доводилося відкривати рот двічі: спочатку – щоб сказати «\ n», а потім, щоб сказати «нічого». Це не сподобалося вразливому юнакові, який сказав

«Твоє \ n звучить для мене, як справжнє« нічого », але от другий все псує. Мені б хотілося, щоб одного з них не було ». Тоді UNIX, яка не могла нікого залишити скривдженим, погодилася скасувати деякі відлуння, вона назвала цю операцію

«\ C». Тепер чутливий молода людина могла почути вчинене відображення мовчання, попросивши «\ n» і «\ c» разом. Але, кажуть, він помер від надмірностей в умовних позначеннях,

так і не почувши жодного скоєного луни.

Вправа 3.3. Спрогнозуйте, що робитиме кожна з пере численних нижче команд grep, потім перевірте свої припущення:

grep  \$               grep  \\ grep  \\$             grep  \\\\ grep  \\\$           grep  "\$" grep  ‘\$’           grep  ‘"$’ grep  ‘\’$’         grep  "$"

Файл, що містить самі ці команди, являє собою гарну сукупність тестових даних, яка може стати в нагоді для даль нейших експериментів. ~

Вправа 3.4. Як домогтися, щоб команда grep здійснювала пошук за шаблоном, що починається з «-»? Чому не допомагає висновок аргументу в лапки? Підказка: досліджуйте параметр-e. ~

Вправа 3.5. Розглянемо

$ echo */*

Виводить така команда всі імена з усіх каталогів? У якому порядку виводяться імена? ~

Вправа 3.6 (Складне питання). Яким чином ввести / в ім’я фай ла (так, щоб цей символ не сприймався як розділяє ком тами імені)? ~

Вправа 3.7. Що відбудеться в результаті

$ cat  x y >y

і

$ cat  x >>x

Подумайте, перш ніж кидатися до комп’ютера. ~

Вправа 3.8. Чому, якщо користувач вводить

$ rm *

команда rm не може попередити його про те, що він намагається видалити всі свої файли? ~

Джерело: Керниган Б., Пайк Р., UNIX. Програмне оточення. – Пер. з англ. – СПб: Символ-Плюс, 2003. – 416 с., Мул.

quot

Файл, що містить самі ці команди, являє собою гарну сукупність тестових даних, яка може стати в нагоді для даль нейших експериментів ~

Вправа 34 Як домогтися, щоб команда grep здійснювала пошук за шаблоном, що починається з «-» Чому не допомагає висновок аргументу в лапки Підказка: досліджуйте параметр-e ~

Вправа 35 Розглянемо

$ echo */*

Виводить така команда всі імена з усіх каталогів У якому порядку виводяться імена ~

Вправа 36 (Складне питання) Яким чином ввести / в імя фай ла (так, щоб цей символ не сприймався як розділяє ком тами імені) ~

Вправа 37 Що відбудеться в результаті

$ cat  x y &gty

і

$ cat  x &gt&gtx

Подумайте, перш ніж кидатися до компютера ~

Вправа 38 Чому, якщо користувач вводить

$ rm *

команда rm не може попередити його про те, що він намагається видалити всі свої файли ~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*