Bagaimana cara mencetak "-n" tanpa mengeluarkan baris baru?
16
Saya mencoba mencetak -nmenggunakan echoperintah. Tetapi jika saya cukup mengetik echo -n, itu hanya mengeluarkan baris baru, tidak muncul -n, malah menerbitkan baris baru.
Masalahnya adalah bahwa echomenafsirkan -nsebagai argumen. Pada implementasi default bash, itu berarti (dari help echo):
-n do not append a newline
Ada berbagai cara untuk menyiasatinya:
Buat menjadi sesuatu yang bukan pilihan dengan memasukkan karakter lain. Sebagai contoh, katakan echountuk tidak mencetak baris baru -n, kemudian kirim untuk mengartikan backslash lolos dengan -edan tambahkan baris baru secara eksplisit.
$ echo -ne '-n\n'-n
Atau, cukup masukkan spasi
$ echo " -n"-n
Namun, itu menambah ruang yang mungkin tidak Anda inginkan.
Gunakan karakter non-cetak sebelum itu. Sini. Saya menggunakan backspace ( \b)
$ echo -e "\b-n"-n
Ini juga menambahkan karakter tambahan yang mungkin tidak Anda inginkan.
Anda benar bahwa karakter apa pun yang valid akan dilakukan.
Pilot6
@ Pilot6 ya tapi masalah dengan pendekatan itu (milik Anda dan milik saya) adalah itu menambah karakter tambahan. Itu dapat menyebabkan masalah di telepon. Apalagi jika Anda ingin menguraikannya dan mencoba sesuatu seperti grep '^-n'. pritnfadalah cara untuk pergi, sungguh.
terdon
Yah, printfmemang lebih baik, tetapi pertanyaannya adalah tentang adil echo.
Pilot6
2
Sepertinya echo -e "-n\c"melakukan hal yang tepat.
Pilot6
1
\cditekan output lebih lanjut
Pilot6
15
Terkadang merupakan ide bagus untuk menggunakan alat yang tepat. Anda bisa menggunakan printf:
Wov! Ini lebih baik dari milikku; dapatkah Anda menjelaskan sedikit untuk "pemula" ;-)
Sadi
Terima kasih, saya juga memperhatikan bahwa tidak masalah di mana Anda menambahkan carriage return, di awal atau di akhir.
Sadi
@Sadi ya, itu karena menambahkan apa pun menjadikannya opsi yang tidak valid. -nvalid, -nfootidak demikian yang akan dicetak.
terdon
@terdon man echomemilikinya juga. Tetapi helpsedikit lebih baik.
Pilot6
Saya tahu ia memilikinya, hanya saja tidak relevan. /bin/echoadalah hal yang sama sekali berbeda dan ketika Anda menjalankan echodi bash, Anda mendapatkan builtin yang bisa sangat berbeda tergantung pada shell Anda.
terdon
5
Saya pikir jika Anda hanya ingin menggunakan echo, ini harus memuaskan Anda:
echo "-n "
Ini berfungsi karena sementara -nadalah opsi yang valid untuk echo, -ndengan spasi setelahnya tidak. Karena ini bukan opsi, echocetak saja.
Yup, saya baru saja menjawab seperti ini. Akan menghapus jawaban saya. Ini relatif portabel karena bekerja dengan gema /bin/echoecho -e "\055n"
bawaan
-en bukan yang saya inginkan.
Bintang OS
2
Untuk memperluas jawaban AB, satu-satunya cara portabel untuk digunakan echoadalah tidak menggunakan opsi apa pun seperti -n. Pertimbangkan penggunaannya printfjika tersedia. Halaman referensi ini memberikan lebih banyak detail dan menjelaskan dengan sangat baik kapan dan bagaimana echodan printfharus digunakan:
Saat ini, gema (1) hanya portabel jika Anda menghilangkan tanda dan menghindari urutan. Gunakan printf (1) sebagai gantinya, jika Anda membutuhkan lebih dari teks biasa.
Saya sudah Anda akan memperpanjang jawaban, silakan edit jawabannya.
Bintang OS
Saya tidak yakin itu ide yang baik untuk mengubah jawaban orang lain ke titik ketika itu akan memiliki lebih banyak teks dari saya daripada dari penulis asli.
Output perintah pertama -pilot6@Pilot6:~$. Keluaran kedua n.
Pilot6
@ Pilot6 Tergantung pada apakah Anda menjalankannya di terminal interaktif atau dalam skrip bash, yang tidak ditentukan dalam pertanyaan. OTOH jika Anda membutuhkannya di terminal, cukup sederhana untuk hanya menggabungkan dua baris dengan &&- Saya tidak akan mengatakan jawaban ini salah .
user12205
Saya akan mengeditnya sehingga menjadi lebih jelas untuk skrip bash.
echo -n -- -n
berfungsi (tidak memiliki kotak linux yang mudah untuk diuji)?getopt
(???) untuk mengurai baris perintahJawaban:
Masalahnya adalah bahwa
echo
menafsirkan-n
sebagai argumen. Pada implementasi default bash, itu berarti (darihelp echo
):Ada berbagai cara untuk menyiasatinya:
Buat menjadi sesuatu yang bukan pilihan dengan memasukkan karakter lain. Sebagai contoh, katakan
echo
untuk tidak mencetak baris baru-n
, kemudian kirim untuk mengartikan backslash lolos dengan-e
dan tambahkan baris baru secara eksplisit.Atau, cukup masukkan spasi
Namun, itu menambah ruang yang mungkin tidak Anda inginkan.
Gunakan karakter non-cetak sebelum itu. Sini. Saya menggunakan backspace (
\b
)Ini juga menambahkan karakter tambahan yang mungkin tidak Anda inginkan.
Gunakan tipu daya
The
rev
perintah hanya mencetak output terbalik.Gunakan alat yang tepat untuk pekerjaan itu
sumber
grep '^-n'
.pritnf
adalah cara untuk pergi, sungguh.printf
memang lebih baik, tetapi pertanyaannya adalah tentang adilecho
.echo -e "-n\c"
melakukan hal yang tepat.\c
ditekan output lebih lanjutTerkadang merupakan ide bagus untuk menggunakan alat yang tepat. Anda bisa menggunakan
printf
:sumber
echo
, sementaraprintf
standarnya lebih baik .Anda dapat menggunakan perintah ini, tetapi itu menambah ruang ekstra.
Ini semacam peretasan.
-e
mengaktifkan simbol perintah backslash.\r
adalah carriage return.Sebenarnya setiap
\
karakter yang valid akan dilakukan di sembarang string.Anda dapat melihat yang valid oleh
help echo
.echo "-n"
tidak berfungsi karena-n
digunakan sebagai parameter untukecho
.PS Solusi IMHO terbaik adalah
Itu tidak menambahkan karakter tambahan .
mencetak sama tetapi dengan char baris baru.
sumber
-n
valid,-nfoo
tidak demikian yang akan dicetak.man echo
memilikinya juga. Tetapihelp
sedikit lebih baik./bin/echo
adalah hal yang sama sekali berbeda dan ketika Anda menjalankanecho
di bash, Anda mendapatkan builtin yang bisa sangat berbeda tergantung pada shell Anda.Saya pikir jika Anda hanya ingin menggunakan
echo
, ini harus memuaskan Anda:Ini berfungsi karena sementara
-n
adalah opsi yang valid untukecho
,-n
dengan spasi setelahnya tidak. Karena ini bukan opsi,echo
cetak saja.sumber
Kalian benar-benar terlalu memikirkannya.
Atau tanpa baris baru
sumber
printf "-n\n"
berlebihan?/bin/echo
echo -e "\055n"
Untuk memperluas jawaban AB, satu-satunya cara portabel untuk digunakan
echo
adalah tidak menggunakan opsi apa pun seperti-n
. Pertimbangkan penggunaannyaprintf
jika tersedia. Halaman referensi ini memberikan lebih banyak detail dan menjelaskan dengan sangat baik kapan dan bagaimanaecho
danprintf
harus digunakan:sumber
Di skrip Bash Anda dapat menjalankan:
Atau dalam cangkang interacive:
Ini
echo
adalah-
karakter dann
karakter.sumber
-pilot6@Pilot6:~$
. Keluaran keduan
.&&
- Saya tidak akan mengatakan jawaban ini salah .Tiga cara lain:
sumber
Anda bisa lari
Diuji dalam Busybox Ash
sumber
ash
adalah nama Shell Almquist.