2012-06-25 72 views
311

Tôi có một vấn đề với echo trong kịch bản của tôi:'echo' mà không xuống dòng trong một kịch bản shell

echo -n "Some string..." 

in

-n Some string... 

và di chuyển đến dòng kế tiếp. Trong giao diện điều khiển nó làm việc correcly mà không xuống dòng:

Some string... 
+2

Bạn đang sử dụng trình bourne shell nào? Nếu tôi chạy 'bash' trong chế độ bourne shell, nó hoạt động tốt ở đây. Ngoài ra, có vẻ như bạn không thực sự sử dụng vỏ bourne làm vỏ tương tác của bạn, phải không? – FatalError

+3

trên Ubuntu: văn bản "echo -ne" không có dòng mới: "; echo "some text"; ' – zsoltii

Trả lời

334

Có nhiều phiên bản của lệnh echo, với hành vi khác nhau. Dường như vỏ được sử dụng cho tập lệnh của bạn sử dụng phiên bản không nhận dạng được -n.

Lệnh printf có hành vi nhất quán hơn nhiều. echo là tốt cho những điều đơn giản như echo hello, nhưng tôi đề nghị sử dụng printf cho bất cứ điều gì phức tạp hơn.

Bạn đang sử dụng hệ thống nào và tập lệnh của bạn sử dụng gì?

+34

Bằng cách bắt đầu với dòng' #!/bin/bash' nó hoạt động. Thông thường tôi đang làm việc với bash. – qwertz

+0

Tôi muốn có một tương đương Windows trong CMD: (Theo như tôi thấy, không có, chỉ cần giải quyết để đạt được cùng một hành vi. –

+2

@kayleeFrye_onDeck: Có lẽ có một phiên bản Windows của lệnh 'printf'. –

51

Hãy thử với

echo -e "Some string...\c" 

Nó làm việc cho tôi như mong đợi (như tôi hiểu từ câu hỏi của bạn).

Lưu ý rằng tôi nhận được thông tin này từ trang man. Trang man cũng lưu ý rằng trình bao có thể có phiên bản echo riêng và tôi không chắc chắn nếu bash có phiên bản riêng.

+0

+1 để gợi ý cho tôi đúng hướng, mặc dù tiếng vọng không nhận ra tùy chọn -ne có thể không nhận ra tùy chọn -e (cũng không cần) hoặc vì vậy bạn có thể muốn chỉ nói "echo" một số chuỗi ... \ c "' thay vào đó. Tuy nhiên, nếu bạn cần hỗ trợ nhiều biến thể bash với các lệnh echo khác nhau, bạn có thể sử dụng printf hoặc bạn cần kiểm tra các khả năng của lệnh echo với một cái gì đó như '[-n" $ (echo -e) "] && echo" sh stuff \ c "|| echo -e "bash stuff \ c" '(ít nhất bash hỗ trợ \ c là tốt, vì vậy không cần sử dụng tùy chọn -n, nhưng bạn cần -e cho bash) – Timo

+0

\ c cảm ơn .. đã làm việc –

78

bash có lệnh "built-in" được gọi là "echo":

$ type echo 
echo is a shell builtin 

Bên cạnh đó, có một "echo" lệnh đó là một thực thi đúng đắn (có nghĩa là, các dĩa vỏ và giám đốc điều hành /bin/echo, như trái ngược với giải thích echo và thực hiện nó):

$ ls -l /bin/echo 
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo 

hành vi của một trong hai WRT echo 's để \c-n khác nhau. Tốt nhất là sử dụng printf, trong đó có sẵn trên bốn hương vị * NIX khác nhau mà tôi nhìn:

$ printf "a line without trailing linefeed" 
$ printf "a line with trailing linefeed\n" 
+2

Cảm ơn ồ ạt trong câu trả lời sâu! – Fuser97381

0

Nếu bạn sử dụng tiếng vang bên trong một nếu với các lệnh khác, như "đọc", nó có thể bỏ qua các thiết lập và nó sẽ chuyển sang một dòng mới.

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