Linux echo экранирование символов

Глава 5. Кавычки

Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке. (Символ называется «специальным», если он несет дополнительную смысловую нагрузку, например символ шаблона — * .)

Некоторые программы и утилиты могут вызываться с дополнительными параметрами, содержащими специальными символы, поэтому очень важно предотвратить интерпретацию передаваемых параметров командной оболочкой, позволяя сделать это вызываемой программой.

Примечательно, что «не окавыченный» вариант команды grep [Пп]ервая *.txt будет правильно исполняться в Bash, но не в tcsh.

Вообще, желательно использовать двойные кавычки ( » » ) при обращении к переменным. Это предотвратит интерпретацию специальных символов, которые могут содержаться в именах переменных, за исключением $ , ` (обратная кавычка) и \ (escape — обратный слэш). [1] То, что символ $ попал в разряд исключений, позволяет выполнять обращение к переменным внутри строк, ограниченных двойными кавычками ( «$variable»), т.е. выполнять подстановку значений переменных (см. Пример 4-1, выше).

Двойные кавычки могут быть использованы для предотвращения разбиения строки на слова. [2] Заключение строки в кавычки приводит к тому, что она передается как один аргумент, даже если она содержит пробельные символы — разделители.

Заключение в кавычки аргументов команды echo необходимо только в том случае, когда разбиение на отдельные слова сопряжено с определенными трудностями.

Пример 5-1. Вывод «причудливых» переменных

Одиночные кавычки ( ‘ ‘ ) схожи по своему действию с двойными кавычками, только не допускают обращение к переменным, поскольку специальный символ «$» внутри одинарных кавычек воспринимается как обычный символ. Внутри одиночных кавычек, любой специальный символ, за исключением ‘ , интерпретируется как простой символ. Одиночные кавычки ( «строгие, или полные кавычки» ) следует рассматривать как более строгий вариант чем двойные кавычки ( «нестрогие, или неполные кавычки» ).

Поскольку внутри одиночных кавычек даже экранирующий ( \ ) символ воспринимается как обычный символ, попытка вывести одиночную кавычку внутри строки, ограниченной одинарными кавычками, не даст желаемого результата.

Экранирование — это способ заключения в кавычки одиночного символа. Экранирующий ( escape ) символ ( \ ) сообщает интерпретатору, что следующий за ним символ должен восприниматься как обычный символ.

С отдельными командами и утилитами, такими как echo и sed, экранирующий символ может применяться для получения обратного эффекта — когда обычные символы при экранировании приобретают специальное значение.

Специальное назначение некоторых экранированных символов

используемых совместно с echo и sed \n

Источник

Echo и экранирование спец-символов

Что-то никак не найду как экранировать >> ‘

Спасибо, ну и жесть.

Это не жесть, просто хитрый ход. В ‘-строке экранирования в принципе нет, поэтому ты завершаешь строку (первая ‘), потом вне строки экранируешь \’, потом заново открываешь. Засчет того, что между тремя токенами (. ‘, \’, ‘. ) нет пробелов, шел сливает это все в одну строку. Собственно все.

upd: гребаные пони

Вот тут как никогда кстати статическая типизация. Пример с кавычкой мой любимый

Ты хотел сказать «строгая типизация»?

Заносишь апостроф в переменную и вперед!

А какая разница? Если компилятор/интерпретатор динамически сортирует твои данные по типам — это явно не строгая типизация.

В пхп вроде можно 1+«2», а в питоне — нет.

Я, давным давно, когда надо было передавать пару байтов при минимуме потерь на код, использовал echo. Потом понял, что кавычки надо передавать вместе с костылями, так как в них заворачиваешь свои данные при вызове переменных, что заставляет извращаться с экранированием. Потому я поменял инструмент на printf(«%STRONG_TYPE_OF_DATA\n», dazhe_kavychka_data); и забыл про использование скриптовых языков при обработке тонкой материи

Но в целом идея тсу думаю понятна.

Кстати, если у нас двойные кавычки, то сабжевая проблема исчезает, а если одинарные, то исчезает интерполяция 🙂

Я на питоне ровно один раз писал. До того момента, пока он мне не стал указывать куда можно кавычку всунуть, а куда — стилистическая ошибка. Так что спорить не буду, использую perl и си как пример. В одном строго int для int, в другом — $i=Чего_Душе_Угодно, если лень

не работает ни в баше, ни в ksh. кстати, ему надо было вставить одинарную кавычку в поток _экранированный одинарными кавычками_, так что метод с переменной в любом случае не катит

то есть, познания в программировании у тебя весьма ограниченны, но при этом, цитируя классика, ты даешь советы космического масштаба и космичекой же глупости, при этом попытно путая термины. строгая и статическая типизация — независимые явления. http://ru.wikipedia.org/wiki/Типизация_данных#.D0.9A.D0.BE.D0.BD.D1.82.D1.80. .

ему надо было вставить одинарную кавычку в поток _экранированный одинарными кавычками_

По мне так строка с $q читабельнее, глаза не спотыкаются на схожих символах ‘\»

согласен, так лучше. сам так делаю =)

Да, я ужасно люблю умничать

ого, да ты никак адекватный! ничего, все мы этим страдаем, главное вовремя останавливаться и признавать свои ошибки.

Источник

Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой

Глава 11. Операторы управления

В данной главе мы будем учиться размещать более одной команды в командной строке, используя для этого операторы управления . Также мы кратко обсудим связанные с этими операторами параметры ($?) и вопросы использования аналогичных операторам специальных символов (&).

Точка с запятой (;)

Амперсанд (&)

Технические подробности выполняющихся при использовании рассматриваемого оператора операций приведены в разделе, посвященном процессам .

Символ доллара со знаком вопроса ($?)

Двойной амперсанд (&&)

Двойная вертикальная черта (||)

Комбинирование операторов && и ||

Знак фунта (#)

Экранирование специальных символов (\)

Обратный слэш в конце строки

Практическое задание: операторы управления

0. Ответ на каждый из вопросов может быть представлен с помощью единственной строки команды!

1. Какой бинарный файл исполняется при вводе команды passwd ?

2. Какого типа данный файл?

3. Выполните команду pwd два раза. (Помните о пункте 0.)

4. Выполните команду ls после команды cd /etc , но только в том случае, если исполнение команды cd /etc завершилось без ошибок.

5. Выполните команду cd /etc после команды cd etc , но только в том случае, если исполнение команды cd etc завершилось ошибкой.

6. Выведите строку «сработало» в случае успешного завершения исполнения команды touch test42 или строку «не сработало» в случае неудачного завершения. Все операторы должны находиться в одной строке и исполняться с привилегиями обычного пользователя (не пользователя root). Протестируйте полученную команду в вашей домашней директории и директории /bin/ .

7. Выполните команду sleep 6 ; для чего предназначена эта команда?

8. Выполните команду sleep 200 в фоновом режиме (без ожидая завершения ее исполнения).

9. Создайте строку команды, в рамках которой будет исполняться команда rm file55 . Ваша строка команды должна выводить строку ‘удалось’ в том случае, если файл file55 был удален и строку ‘не удалось’ в случае возникновения проблем.

10 (необязательное задание). Используйте команду echo для вывода строки «Hello World со странными’ символами \ * [ >

\\ .» (включая все кавычки).

Корректная процедура выполнения практического задания: операторы управления

0. Ответ на каждый из вопросов может быть представлен с помощью единственной строки команды!

1. Какой бинарный файл исполняется при вводе команды passwd ?

2. Какого типа данный файл?

3. Выполните команду pwd два раза. (Помните о пункте 0.)

4. Выполните команду ls после команды cd /etc , но только в том случае, если исполнение команды cd /etc завершилось без ошибок.

5. Выполните команду cd /etc после команды cd etc , но только в том случае, если исполнение команды cd etc завершилось ошибкой.

6. Выведите строку «сработало» в случае успешного завершения исполнения команды touch test42 или строку «не сработало» в случае неудачного завершения. Все операторы должны находиться в одной строке и исполняться с привилегиями обычного пользователя (не пользователя root). Протестируйте полученную команду в вашей домашней директории и директории /bin/ .

7. Выполните команду sleep 6 ; для чего предназначена эта команда?

Осуществляется ожидание в течение 6 секунд

8. Выполните команду sleep 200 в фоновом режиме (без ожидая завершения ее исполнения).

9. Создайте строку команды, в рамках которой будет исполняться команда rm file55 . Ваша строка команды должна выводить строку ‘удалось’ в том случае, если файл file55 был удален и строку ‘не удалось’ в случае возникновения проблем.

10 (необязательное задание). Используйте команду echo для вывода строки «Hello World со странными’ символами \ * [ >

Источник

Популярный Linux

Вход в систему

Новые записи в блогах

Популярное

За последнее время:

Глава 5. Кавычки

Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке. (Символ называется «специальным», если он несет дополнительную смысловую нагрузку, например символ шаблона — * .)

Некоторые программы и утилиты могут вызываться с дополнительными параметрами, содержащими специальными символы, поэтому очень важно предотвратить интерпретацию передаваемых параметров командной оболочкой, позволяя сделать это вызываемой программой.

Примечательно, что «не окавыченный» вариант команды grep [Пп]ервая *.txt будет правильно исполняться в Bash, но не в tcsh.

Вообще, желательно использовать двойные кавычки ( » » ) при обращении к переменным. Это предотвратит интерпретацию специальных символов, которые могут содержаться в именах переменных, за исключением $ , ` (обратная кавычка) и \ (escape — обратный слэш). [14] То, что символ $ попал в разряд исключений, позволяет выполнять обращение к переменным внутри строк, ограниченных двойными кавычками ( «$variable»), т.е. выполнять подстановку значений переменных (см. Пример 4-1, выше).

Двойные кавычки могут быть использованы для предотвращения разбиения строки на слова. [15] Заключение строки в кавычки приводит к тому, что она передается как один аргумент, даже если она содержит пробельные символы — разделители.

Заключение в кавычки аргументов команды echo необходимо только в том случае, когда разбиение на отдельные слова сопряжено с определенными трудностями.

Пример 5-1. Вывод «причудливых» переменных

Одиночные кавычки ( ‘ ‘ ) схожи по своему действию с двойными кавычками, только не допускают обращение к переменным, поскольку специальный символ «$» внутри одинарных кавычек воспринимается как обычный символ. Внутри одиночных кавычек, любой специальный символ, за исключением ‘ , интерпретируется как простой символ. Одиночные кавычки ( «строгие, или полные кавычки» ) следует рассматривать как более строгий вариант чем двойные кавычки ( «нестрогие, или неполные кавычки» ).

Поскольку внутри одиночных кавычек даже экранирующий ( \ ) символ воспринимается как обычный символ, попытка вывести одиночную кавычку внутри строки, ограниченной одинарными кавычками, не даст желаемого результата.

Экранирование — это способ заключения в кавычки одиночного символа. Экранирующий ( escape ) символ ( \ ) сообщает интерпретатору, что следующий за ним символ должен восприниматься как обычный символ.

С отдельными командами и утилитами, такими как echo и sed, экранирующий символ может применяться для получения обратного эффекта — когда обычные символы при экранировании приобретают специальное значение.

Специальное назначение некоторых экранированных символов

используемых совместно с echo и sed \n

перевод строки (новая строка)

ASCII-символ с кодом 0xx в восьмеричном виде)

Пример 5-2. Экранированные символы

Еще один пример использования конструкции $’ ‘ вы найдете в Пример 34-1.

символ доллара (если за комбинацией символов \$ следует имя переменной, то она не будет разыменована)

Поведение символа \ сильно зависит от того экранирован ли он, ограничен ли кавычками или находится внутри конструкции подстановки команды или во вложенном документе.

Источник

Читайте также:  Windows 10 enterprise x32 x64
Оцените статью