Nie rozumiem, jak bash ocenia ucieczkę znaków apostrofu w ciągach pojedynczych cudzysłowów.
Oto przykład:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Próbowałem szukać wyjaśnień na ten temat, ale nic nie mogłem uzyskać. Co tu robi bash?
echo \''Hello World'\'
Odpowiedzi:
W pojedynczych cudzysłowach nie ma możliwości ucieczki. Nie ma sposobu, aby dołączyć pojedynczy cytat do pojedynczych cytatów. Zobacz Cytowanie w bashu .
źródło
echo '\''
echo $'\'hello world\''
Oprócz obsługiwanego przez POSIX jedno- i podwójnego cudzysłowu,
bash
zapewnia dodatkowy typ cytowania, aby umożliwić małej klasie znaków zmiany znaczenia (w tym pojedynczego cudzysłowu) w ciągu cytowanego:Zobacz sekcję CYTOWANIE na
bash
stronie podręcznika, pod koniec sekcji. (Wyszukaj „ANSI C”.)źródło
Aby wyjaśnić, co się dzieje z twoimi apostrofami, które przeanalizowaliśmy, przeanalizujemy Twój drugi przykład (zobacz także pojedyncze cytaty lub mocne cytaty ):
Tutaj pozostawiłeś cytat wiszący, jak już powiedziałeś. Teraz przytnij koniec i zmień go na:
Podciąg „Hello World” nie był tutaj cytowany, ale zachowywał się tak, jakby był mocno cytowany. Korzystając z twojego przykładu, przyciąć koniec inaczej inaczej:
Podciąg „Hello World” znów zachowuje się tak, jakby był mocnym cytatem, z tylko dodanym apostrofem (uciekł, więc nie jest już pojedynczym cytatem) na końcu.
Kiedy na końcu dodawany jest kolejny pojedynczy cytat (twój oryginalny przykład), łańcuch pozostaje zawieszony i czeka na dokładny cytat.
źródło
Prosty przykład ucieczki cytatów w powłoce:
Odbywa się to poprzez zamknięcie już otwartego (
'
), umieszczenie klawisza Esc (\'
) w celu wydrukowania, a następnie otwarcie kolejnego ('
).Alternatywnie:
Odbywa się to poprzez ukończenie już otwartego jednego (
'
), umieszczenie cytatu w innym cytacie ("'"
), a następnie otwarcie kolejnego ('
).To, co zrobiłeś (
'\'Hello World\''
), to:'
.\'
, więc ciąg ma postać:'\'
.Hello World
to nie cytaty.\'
) bez otwierania go.'
) jest łańcuchem otwierającym, ale nie ma oczekiwanego zamknięcia.Prawidłowy przykład to:
Powiązane: Jak uniknąć pojedynczych cudzysłowów w ciągach pojedynczych?
źródło