2010-04-15 26 views
6

Tại sao
$ echo '-n'
không ghi trên thiết bị đầu cuối mặc dù -n được viết trong dấu ngoặc kép?echo newline suppression

+0

Ngôn ngữ bạn đang sử dụng? – thecoshman

+0

Tôi đoán rằng đây là một câu hỏi cú pháp vỏ (tức là, bash hoặc bất cứ điều gì). – Pointy

Trả lời

8

Bởi vì các dấu ngoặc kép được xử lý bởi trình bao và lệnh echo nhận được đồng bằng -n. Nếu bạn muốn phản hồi -n, bạn có thể ví dụ: printf '%s\n' -n

+2

đó là một sự xấu hổ '--' (kết thúc tùy chọn) không được hỗ trợ: ( – extraneon

+0

Làm việc sau với bash: echo -e -n \\ c – Tino

0

Trích dẫn không giúp được gì vì ... ugh, thật khó để giải thích. Trình bao tách dấu ngoặc kép trước khi lệnh "echo" được đánh giá, do đó, vào thời điểm đó chúng không quan trọng.

Hãy thử điều này:

echo - -n 

Đó không phải tài liệu như làm việc (Tôi đang chạy Ubuntu Linux), nhưng echo là gần như chắc chắn một built-in để bất cứ điều gì vỏ bạn đang sử dụng, do đó trang người đàn ông là có vấn đề. Nó làm việc cho tôi. (Tôi đang chạy zsh vì tôi thực sự suave và tinh vi).

chỉnh sửa: có vẻ như là bash được dựng sẵn edit không hoạt động theo cách đó. Tôi không biết nên đề nghị gì; này:

echo '' -n 

sẽ cung cấp cho bạn "-n" trước một khoảng trắng (tùy thuộc vào việc bạn đang làm) có thể OK.

+0

Không hiệu quả với tôi. Đầu ra '- -n' – extraneon

+0

Đối với tôi, hãy thực hiện điều này > echo - -n - -n –

+0

Hmm, như tôi vừa lưu ý trong bản chỉnh sửa, nó có thể thay đổi từ shell thành shell. – Pointy

2

bạn nên cố gắng sử dụng di động printf càng nhiều càng tốt.

2

Bạn có thể thử

echo -e '\055n' 
0

Không quiete có:

echo -e 'a-n\b\b\b ' 
-n 

đáng ngạc nhiên làm việc này:

echo -e '-n\b' 
-n 

và đây là một giải pháp tôi có thể giải thích:

echo "foobar" | sed 's/.*/-n/' 
-n 
.210
2

tôi thấy rằng sau chỉ hoạt động trong bash:

echo -n PRINT_THIS 

Vì vậy, bạn nên đặt -n nơi đầu tiên.