Saya mencoba mencetak -n
menggunakan echo
perintah. Tetapi jika saya cukup mengetik echo -n
, itu hanya mengeluarkan baris baru, tidak muncul -n
, malah menerbitkan baris baru.
getopt
(???) untuk mengurai baris perintah
Saya mencoba mencetak -n
menggunakan echo
perintah. Tetapi jika saya cukup mengetik echo -n
, itu hanya mengeluarkan baris baru, tidak muncul -n
, malah menerbitkan baris baru.
getopt
(???) untuk mengurai baris perintah
Jawaban:
Masalahnya adalah bahwa echo
menafsirkan -n
sebagai 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 echo
untuk tidak mencetak baris baru -n
, kemudian kirim untuk mengartikan backslash lolos dengan -e
dan 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.
Gunakan tipu daya
$ echo n- | rev
-n
The rev
perintah hanya mencetak output terbalik.
Gunakan alat yang tepat untuk pekerjaan itu
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
adalah cara untuk pergi, sungguh.
printf
memang lebih baik, tetapi pertanyaannya adalah tentang adil echo
.
echo -e "-n\c"
melakukan hal yang tepat.
\c
ditekan output lebih lanjut
Terkadang merupakan ide bagus untuk menggunakan alat yang tepat. Anda bisa menggunakan printf
:
% printf "-n\n"
-n
echo
, sementara printf
standarnya lebih baik .
Anda dapat menggunakan perintah ini, tetapi itu menambah ruang ekstra.
echo -e "\r-n"
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 untuk echo
.
PS Solusi IMHO terbaik adalah
echo -e "-n\c"
Itu tidak menambahkan karakter tambahan .
echo -e "-n\n"
mencetak sama tetapi dengan char baris baru.
-n
valid, -nfoo
tidak demikian yang akan dicetak.
man echo
memilikinya juga. Tetapi help
sedikit lebih baik.
/bin/echo
adalah hal yang sama sekali berbeda dan ketika Anda menjalankan echo
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:
echo "-n "
Ini berfungsi karena sementara -n
adalah opsi yang valid untuk echo
, -n
dengan spasi setelahnya tidak. Karena ini bukan opsi, echo
cetak saja.
Kalian benar-benar terlalu memikirkannya.
echo -e \\055n
Atau tanpa baris baru
echo -en \\055n
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 penggunaannya printf
jika tersedia. Halaman referensi ini memberikan lebih banyak detail dan menjelaskan dengan sangat baik kapan dan bagaimana echo
dan printf
harus 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.
Di skrip Bash Anda dapat menjalankan:
echo -n -
echo n
Atau dalam cangkang interacive:
echo -n - ; echo n
Ini echo
adalah -
karakter dan n
karakter.
-pilot6@Pilot6:~$
. Keluaran kedua n
.
&&
- Saya tidak akan mengatakan jawaban ini salah .
Anda bisa lari
printf -n;echo
Diuji dalam Busybox Ash
ash
adalah nama Shell Almquist.
echo -n -- -n
berfungsi (tidak memiliki kotak linux yang mudah untuk diuji)?