2011-11-24 14 views
38

chcę wyświetlić ciąg w bash jak tenJak uniknąć pojedynczego cudzysłowu w jednym cudzysłowie w Bash?

I'm a student 

Oczywiście można to zrobić następująco

echo "I'm a student" 

ale jak do osiągnięcia tego podczas korzystania z pojedynczego cudzysłowu wokół napisu?

+4

Niestety, nie ma sposobu, aby umieścić apostrof pomiędzy apostrofami. Zobacz http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters w sekcji '3.1.2.2 Single Quotes' –

Odpowiedz

70
echo 'I\'m a student' 

nie działa. Ale następujące prace:

echo $'I\'m a student' 

Od strony man bash:

Jeden cytat nie może wystąpić pomiędzy apostrofami, nawet gdy poprzedzone lewym ukośnikiem.
....
Słowa formularza $ 'string' są traktowane specjalnie. Słowo rozwija się do łańcucha znaków, a znaki z odwróconą kreską ułamkową zastępowane są jako określone przez standard ANSI C.

+3

Brzydsza forma to:' 'I' '' '' ma student ' –

+32

Dlaczego, bash, * whyyyy *? –

+2

'echo $ 'Jestem uczniem!' '=>'!': Event not found', to nie jest * prawdziwy * pojedynczy cytowany ciąg, który w bashu powinien chronić przed jakąkolwiek interpretacją. – regilero

33

"Brzydkie" rozwiązanie, o którym wspomniał Glenn Jackman, powinno być wymienione jako odpowiedź na najwyższym poziomie. Działa dobrze i jest rzeczywiście piękny w niektórych sytuacjach.

'I'"'"'m a student' 

To kończy jeden cudzysłowie po I natychmiast rozpoczyna podwójną cytowany łańcuch zawierający pojedynczy cudzysłów, a następnie rozpoczyna się kolejny singiel cudzysłowie. Bash łączy wszystkie ciągłe ciągi w jeden.

Piękna!

+18

Myślę, że nasze definicje piękna różnią się nieco ..;) –

0

Poniższy przykład działa, ponieważ uciekł apostrof \' jest technicznie między dwoma pojedynczymi cytowany argumentów

echo 'I'\''m a student' 
Powiązane problemy