Saya memiliki masalah dengan echo
skrip saya:
echo -n "Some string..."
cetakan
-n Some string...
dan pindah ke baris berikutnya. Di konsol itu berfungsi dengan baik tanpa baris baru:
Some string...
shell
command-line
sh
qwertz
sumber
sumber
bash
dalam mode bourne shell, itu berfungsi dengan baik di sini. Juga, agak tidak mungkin Anda benar-benar menggunakan shell bourne sebagai shell interaktif Anda, bukan?echo -ne "text without new line: "; echo "some text";
Jawaban:
Ada beberapa versi
echo
perintah, dengan perilaku berbeda. Rupanya shell yang digunakan untuk skrip Anda menggunakan versi yang tidak dikenali-n
.The
printf
perintah memiliki perilaku yang jauh lebih konsisten.echo
baik untuk hal-hal sederhana sepertiecho hello
, tetapi saya sarankan menggunakanprintf
untuk hal yang lebih rumit.Sistem apa yang Anda gunakan, dan shell apa yang digunakan skrip Anda?
sumber
#!/bin/bash
itu berhasil. Biasanya saya bekerja dengan bash.printf
perintah.echo
selalu menambahkan baris baru ... Penanganannya jenky di terbaik.%
Adalah prompt shell Anda. Coba ini, dan perhatikan dengan cermat:printf hello; sleep 5
bash
memiliki perintah "built-in" yang disebut "echo":Selain itu, ada perintah "echo" yang dapat dieksekusi (yaitu, shell fork dan eksekutif
/bin/echo
, yang bertentangan dengan menafsirkanecho
dan mengeksekusi itu):Perilaku
echo
WRT baik\c
dan-n
bervariasi. Taruhan terbaik Anda adalah menggunakanprintf
, yang tersedia pada empat rasa * NIX berbeda yang saya lihat:sumber
Coba dengan
Ini bekerja untuk saya seperti yang diharapkan (seperti yang saya mengerti dari pertanyaan Anda).
Perhatikan bahwa saya mendapat informasi ini dari
man
halaman. Theman
halaman juga mencatat shell mungkin memiliki versi sendiriecho
, dan saya tidak yakin apakahbash
memiliki versi sendiri.sumber
echo "some string...\c"
saja. Namun jika Anda perlu mendukung beberapa varian bash dengan perintah gema yang sangat berbeda, Anda mungkin lebih baik menggunakan printf atau Anda perlu memeriksa kemampuan perintah gema dengan sesuatu seperti[ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(setidaknya bash mendukung \ c juga, jadi tidak perlu menggunakan -n opsi, tetapi Anda membutuhkan -e untuk bash)Untuk mencapai ini pada dasarnya ada dua metode yang sering saya gunakan:
1. Menggunakan karakter pelarian kursor (
\c
) denganecho -e
Contoh :
-e
flag memungkinkan karakter E scape dalam string.\c
mengembalikan kursor C ke garis saat ini.ATAU
2. Menggunakan
printf
perintahContoh :
sumber
Jika Anda menggunakan gema di dalam sebuah if dengan perintah lain, seperti "baca", mungkin mengabaikan pengaturan dan toh akan melompat ke baris baru.
sumber
Hanya untuk linux yang paling populer
Ubuntu
& itubash
:Periksa cangkang mana yang Anda gunakan? Sebagian besar di bawah ini berfungsi, kalau tidak lihat ini :
echo $0
Jika cetakan di atas
bash
, maka di bawah ini akan berfungsi:printf "hello with no new line printed at end"
ATAU
echo -n "hello with no new line printed at end"
sumber
Saya yakin saat ini hasil cetak Anda seperti di bawah ini
Anda dapat menggunakan
xargs
untuk mendapatkan stdout multiline ke baris yang sama.sumber
Ketika Anda pergi dan menulis skrip shell Anda selalu menempatkan baris pertama sebagai #! / Usr / bin / env bash. Shell ini tidak menghilangkan atau memanipulasi urutan escape. ex echo "Ini pertama \ n baris" mencetak Ini adalah pertama \ n baris.
sumber
sumber