Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке. (Символ называется «специальным», если он несет дополнительную смысловую нагрузку, например символ шаблона — * .)
Некоторые программы и утилиты могут вызываться с дополнительными параметрами, содержащими специальными символы, поэтому очень важно предотвратить интерпретацию передаваемых параметров командной оболочкой, позволяя сделать это вызываемой программой.
Примечательно, что «не окавыченный» вариант команды 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.
символ доллара (если за комбинацией символов \$ следует имя переменной, то она не будет разыменована)
Поведение символа \ сильно зависит от того экранирован ли он, ограничен ли кавычками или находится внутри конструкции подстановки команды или во вложенном документе.