2013-09-21 45 views
17

Tôi muốn in dấu ngoặc kép bằng cách sử dụng câu lệnh echo trong lập trình vỏ.in dấu ngoặc kép trong lập trình vỏ

Ví dụ:

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

in xyz,123,abc,pqrs

Làm thế nào để in "xyz","123","abc","pqrs";

Tôi đã cố gắng đặt dấu ngoặc kép trong echo tuyên bố nhưng không được in.

Trả lời

25

Bạn chỉ phải trích họ:

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

Như đã đề cập here:

Kèm theo ký tự trong dấu ngoặc kép ('"') bảo tồn các giá trị văn chương của tất cả các ký tự trong dấu ngoặc kép, ngoại trừ '$', '`', '\' và, khi mở rộng lịch sử được bật, '!'. Các ký tự '$' và '`' giữ lại ý nghĩa đặc biệt của chúng trong dấu ngoặc kép (xem Mở rộng vỏ). Dấu gạch chéo ngược duy trì ý nghĩa đặc biệt của nó chỉ khi theo sau bởi một trong các ký tự sau: '$', '`', '"', '\' hoặc dòng mới. Trong dấu ngoặc kép, dấu gạch chéo ngược theo sau là một trong số Các dấu gạch chéo trước các ký tự không có một ý nghĩa đặc biệt không được sửa đổi, một dấu trích dẫn kép có thể được trích dẫn trong dấu ngoặc kép bằng cách đặt trước dấu gạch chéo ngược. trích dẫn được thoát bằng dấu gạch chéo ngược. Dấu gạch chéo ngược trước '!' không bị xóa.

Thông số đặc biệt '*' và '@' hav e ý nghĩa đặc biệt khi trong ngoặc kép báo giá (xem Shell Parameter Expansion).

+1

Nó phải là 'printf' không' in' –

+0

Bạn có thể muốn nói 'echo' thay vì' print'! – devnull

+0

@snyder Có lệnh in trong các trình bao khác. – konsolebox

3

Bạn nên thoát khỏi " để làm cho nó có thể nhìn thấy trong đầu ra, bạn có thể làm điều này:

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

Phiên bản đầu tiên chạy vào các vấn đề nếu bất kỳ tham số vị trí nào chứa ký tự '%'; công trình thứ hai. –

+0

@JonathanLeffler Ồ vâng bạn đúng, chỉnh sửa câu trả lời –

+0

Đối số của bạn cũng nên được đặt xung quanh một cặp đôi duy nhất: 'echo" "\" $ 1 \ ", \" $ 2 \ ", \" $ 3 \ ", \" $ 4 \ "" 'hoặc biến khác sẽ bị tách từ với IFS và mở rộng tên đường dẫn có thể. – konsolebox

8

Sử dụng printf, không thoát được yêu cầu:

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

và trailing ; được in quá!

+0

Chỉ printf đó không tương thích với tất cả các shell. – konsolebox

+1

Hmm ..' printf' được xác định bởi [ POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html) – devnull

+0

Có, nhưng không phải trong Hệ thống V. – konsolebox

Các vấn đề liên quan