2013-09-21 13 views
17

Chcę wydrukować podwójne cudzysłowy za pomocą instrukcji echo w programowaniu powłoki.drukuj podwójne cytaty w programowaniu powłoki

Przykład:

echo "$1,$2,$3,$4"; 

drukuje xyz,123,abc,pqrs

Jak drukować "xyz","123","abc","pqrs";

próbowałem umieścić cudzysłów w instrukcji echo, ale jej nie jest drukowany.

Odpowiedz

25

Po prostu trzeba je zacytować:

echo "\"$1\",\"$2\",\"$3\",\"$4\"" 

Jak zauważył here:

obudów znaków w cudzysłowach ('"') chroni dosłowne wartości wszystkich znaków wewnątrz cudzysłowów, z wyjątkiem "$", "` "," \ "oraz, gdy rozszerzenie historii jest włączone,"! ". Znaki " $ "i" `" zachowują swoje specjalne znaczenie w podwójnych cudzysłowach (patrz Rozszerzenia powłoki). Odwrotny ukośnik zachowuje swoje specjalne znaczenie tylko wtedy, gdy , po którym następuje jeden z następujących znaków: '$', '`', '"', '\' lub znak nowej linii.W podwójnych cudzysłowach znaki odwrócone, które są poprzedzone jedną z następujących: znaki są usuwane, ukośniki poprzedzające znaki bez znacznika specjalne znaczenie pozostawia się niezmienione.Numer podwójny może być cytowany w podwójnym cudzysłowie, poprzedzając go odwróconym ukośnikiem.Jeśli jest włączony, rozszerzenie historii zostanie przeprowadzone, chyba że '!' pojawia się w podwójnym Cytaty są usuwane przy użyciu odwróconego ukośnika wstecznego ukośnika odwrotnego ukośnika poprzedzającego znak "!" . Nie jest usuwany lewy ukośnik

Parametry specjalne "*" i "@" hav Specjalne znaczenie, gdy podane są w podwójnych cytatach (patrz Rozszerzanie parametrów skorupy).

+1

Powinien to być 'printf', a nie' print' –

+0

Prawdopodobnie chciałeś powiedzieć 'echo' zamiast' print'! – devnull

+0

@snyder Istnieje również polecenie drukowania w innych powłokach. – konsolebox

3

Należy uciec " aby był on widoczny na wyjściu, można to zrobić:

echo \""$1"\",\""$2"\",\""$3"\",\""$4"\" 
+0

Pierwsza wersja uruchamia się, jeśli którykolwiek z parametrów pozycyjnych zawiera znak '%'; drugi działa. –

+0

@JonathanLeffler Oh tak masz rację, edytowałeś odpowiedź –

+0

Twoja argumentacja powinna być również umieszczona wokół pojedynczej pary podwójnych cytatów: 'echo" "\" 1 $ \ ", \" 2 $ \ ", \" 3 $ \ ", \" 4 $ \ "" lub zmienne będą podlegać podziałowi słów z IFS i możliwej rozbudowie nazwy ścieżki – konsolebox

8

Zastosowanie printf, ma ucieczki jest wymagany:

printf '"%s","%s","%s","%s";\n' $1 $2 $3 $4 

i spływu ; też zostanie wydrukowany!

+0

Tylko że printf nie jest kompatybilny ze wszystkimi powłokami – konsolebox

+1

Hmm .. 'printf' jest zdefiniowany przez [ POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html). – devnull

+0

Tak, ale nie w Systemie V. – konsolebox

Powiązane problemy