Я не понимаю, как bash оценивает экранирование символов апострофа в одиночных кавычках.
Вот пример:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Я пытался найти объяснения этому, но ничего не смог получить. Что Баш здесь делает?
echo \''Hello World'\'
Ответы:
В одинарных кавычках экранирование невозможно. Там нет никакого способа , как включить одинарные кавычки в одиночные кавычки. См Цитирование в человека Баш .
источник
echo '\''
echo $'\'hello world\''
В дополнение к одиночным и двойным кавычкам, поддерживаемым POSIX,
bash
предоставляется дополнительный тип кавычек, позволяющий небольшому классу экранированных символов (включая одинарные кавычки) в строке в кавычках:См квотирования раздел в справочной
bash
странице, в конце раздела. (Ищите «ANSI C».)источник
Для того, чтобы объяснить , что происходит с вашими сбежавших апострофы, мы рассмотрим ваш второй пример (также см одиночные кавычки , или сильные кавычки ):
Здесь вы оставили предложение висящим, как вы заявили. Теперь обрежьте конец и измените его на:
Подстрока "Hello World" здесь не была заключена в кавычки, но она вела себя так, как если бы она была в сильных кавычках. Используя ваш пример снова, обрезки конца иначе на этот раз:
Подстрока «Hello World» снова ведет себя так, как если бы она была в сильных кавычках, только с добавленным апострофом (экранированный, поэтому больше не одиночная кавычка) в конце.
Когда в конце добавляется еще одна одинарная кавычка (ваш оригинальный пример), строка остается висящей и ожидает закрывающей кавычки.
источник
Простой пример побега котировки в оболочке:
Это делается путем закрытия уже открытого one (
'
), размещения экранированного one (\'
) для печати, затем открытия другого ('
).В качестве альтернативы:
Это сделано по окончанию уже открыл один (
'
), размещение цитаты в других кавычках ("'"
), затем открыть еще одну ('
).Что вы сделали (
'\'Hello World\''
), это:'
.\'
, так что строка будет выглядеть так :'\'
.Hello World
не цитирует.\'
) , не открывая его.'
) - открывающая строка, но ожидаемой закрывающей строки нет.Таким образом, правильный пример будет:
Связанный: Как избежать одиночных кавычек в одиночных кавычках?
источник