nieoczekiwany EOF podczas wyszukiwania pasującego `` ''

3

Czy ktoś mógłby mi wyjaśnić, dlaczego echo 'test \'hi\'' > testnie działa? Nie zapisuje hisię do pliku test. Wydaje się, że pojedyncze cytaty zostały właściwie usunięte, prawda?

Dzięki.

Devator
źródło
Czy to konkretny język czy coś takiego? i prawdopodobnie byłoby to pytanie StackOverflow ..
cutrightjm
przyczyna błędu: 2. cytat kończy ciąg rozpoczynający się od 1. cytatu; trzeci cytat został pominięty, więc jest to tylko postać; a czwarty cytat nie pasuje do końca łańcucha.
glenn jackman

Odpowiedzi:

4

Nie można osadzać pojedynczych cudzysłowów w ciągach pojedynczych cudzysłowów. Zamiast tego musisz umieścić i uciec z pojedynczych cudzysłowów poza cytowany ciąg.

Na przykład:

echo 'test '\''hi'\' > test

To pisze:

  • testz 'test '(z jedną spacją po słowie test- podświetlanie składni nie odzwierciedla tego tutaj ...)
  • podaje \'się jako dosłowny cytat
  • pisze hiz 'hi'.
  • podaje \'się jako dosłowny cytat
  • powoduje test 'hi'zapis do pliku o nazwie test.
ziesemer
źródło
echo "test 'hi'" > testzadziała również
glenn jackman
@glennjackman - Zgadzam się, ale ważne jest, aby zrozumieć, że można to zrobić bez zmiany typów cytatów - co by się stało, gdybyś musiał wyświetlić oba? Są one również zasadniczo różne, ponieważ podwójne cudzysłowy pozwolą na rozszerzenie podstawień zmiennych, podczas gdy pojedyncze cudzysłowy ich nie rozwiną.
ziesemer
To prawda, że ​​zależy to od tego, czego chce OP. Ale należy wziąć pod uwagę czytelność / łatwość konserwacji.
glenn jackman
Dzięki. Tekst hijest zwykle zmienną wprowadzaną przez użytkownika, dlatego jest to z cudzysłowami (przekazywanymi z PHP przez escapeshellcmd).
Devator,