Одиночна пропозиція в подвійних лапках та довідник Посібника Баша


18

У розділі 3.1.2.3 під назвою "Подвійні котирування" посібник Баша говорить:

Закриваючи символи подвійними лапками ('"'), зберігається буквальне значення всіх символів у лапках, за винятком '$', '' ',' \ 'і, коли розширення історії ввімкнено,'! '.

На даний момент я переймаюся єдиною цитатою ( ').

Це особливе значення, описане в попередньому розділі, розділ 3.1.2.2:

Замикання символів в одиничних лапках ( ') зберігає буквальне значення кожного символу в лапках. Одиночна цитата може не виникати між окремими цитатами, навіть коли передує зворотна косою рисою.

Поєднуючи дві експозиції,

 echo "'$a'"

де змінна aне визначена (отже, $a= null string), повинна друкуватися $aна екрані, оскільки '', маючи це особливе значення всередині, захищатиметься $від спеціальної інтерпретації. Натомість друкує ''. Чому так?

Відповіді:


21

Символ 'єдиної цитати у вашому echoприкладі отримує буквальне значення (і втрачає значення), оскільки він укладений у подвійні лапки ( "). Символи, що додаються, - це подвійні лапки.

Що ви можете зробити, це надрукувати окремі цитати окремо:

echo "'"'$a'"'"

або втекти $:

echo "'\$a'"

О, ви абсолютно праві! Вихід відповідає вашій відповіді, але я сумніваюсь, що у рядку "Закриття символів у подвійних лапках ('"') зберігає буквальне значення всіх символів у цитатах, за винятком "$", " ’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde (""). м вдячний за вашу швидку відповідь.Дякую!
Lavya

2
Другий символ, згаданий у посібнику, - це зворотний вибір, а не тильда.
Кенні Евітт

6

Ви неправильно розумієте документацію:

маючи це особливе значення всередині, захищає $ від спеціальної інтерпретації

«Маючи своє спеціальне значення» означає , що це інтерпретується Спеціально не буквально. Одиночні котирування не дозволяють $поширюватися. Але одиничні лапки в подвійних лапках є буквальними символами, тобто вони нічого не впливають. Якщо ви хочете вихід, $aто вам потрібно echo '$a'.


ти правий. Я не лише неправильно зрозумів документ, я неправильно його прочитав (говорити "" "за" ""!). Ви маєте рацію щодо "одиничні лапки в подвійних лапках - це буквальні символи". Спасибі!
Lavya
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.