Pojedynczy cytat w podwójnych cudzysłowach i podręcznik referencyjny Bash


18

W sekcji 3.1.2.3, zatytułowanej Podwójne cytaty, instrukcja Bash mówi:

Umieszczanie znaków w podwójnych cudzysłowach („” ”) zachowuje dosłowną wartość wszystkich znaków w cudzysłowach, z wyjątkiem„ $ ”,„ „”, „\”, a gdy włączone jest rozszerzanie historii, „!”.

W tej chwili interesuje mnie pojedynczy cytat ( ').

Jego specjalne znaczenie, opisane w poprzedniej sekcji, sekcja 3.1.2.2, to:

Umieszczanie znaków w pojedynczych cudzysłowach ( ') zachowuje dosłowną wartość każdego znaku w cudzysłowach. Pojedynczy cytat może nie wystąpić między pojedynczymi cudzysłowami, nawet jeśli poprzedzony jest odwrotnym ukośnikiem.

Łącząc dwie ekspozycje,

 echo "'$a'"

gdzie zmienna anie jest zdefiniowana (stąd $a= ciąg zerowy), powinna zostać wydrukowana $ana ekranie, ponieważ ''mając w środku swoje specjalne znaczenie, chroniłaby $przed specjalną interpretacją. Zamiast tego drukuje ''. Dlaczego tak?

Odpowiedzi:


21

'Pojedynczy znak cytat w echoprzykładzie dostaje to wartość literalną (i traci swoje znaczenie), ponieważ zawarty w cudzysłowach ( "). Załączające znaki to podwójne cudzysłowy.

Co możesz zrobić, to wydrukować pojedyncze cytaty osobno:

echo "'"'$a'"'"

lub uciec od $:

echo "'\$a'"

Och, masz całkowitą rację! Wynik jest zgodny z twoją odpowiedzią, ale moje wątpliwości dotyczyły wiersza „Obejmowanie znaków podwójnymi cudzysłowami („ ””) zachowuje dosłowną wartość wszystkich znaków w cudzysłowach, z wyjątkiem „$”, „ ’, ‘\’, 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 ("”).
Jestem

2
Drugi znak wymieniony w instrukcji to tyknięcie, a nie tylda.
Kenny Evitt,

6

Źle zrozumiałeś dokumentację:

mając w środku swoje specjalne znaczenie, chroniłoby $ przed specjalną interpretacją

„Ma swoje specjalne znaczenie” oznacza, że jest interpretowane specjalnie nie dosłownie. Pojedyncze cudzysłowy uniemożliwiają $rozwinięcie. Ale pojedyncze cudzysłowy w podwójnych cudzysłowach są dosłowne, tzn. Nie wpływają na nic. Jeśli chcesz uzyskać wynik $a, potrzebujesz echo '$a'.


masz rację. Nie tylko źle zrozumiałem dokument, ale też go źle odczytałem (mówiąc „za” „!”). masz rację, że „pojedyncze cudzysłowy w podwójnych cudzysłowach to dosłowne znaki”. Dzięki!
Lavya
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.