GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Pergantian Perintah Shell Melahap A Trailing Newline Char?

Sesuai contoh berikut, dan seperti dalam pertanyaan saya baru-baru ini Di bash, ke mana char baris baru yang tertinggal? , saya ingin tahu "mengapa" itu terjadi

  x="$(echo -ne "anbn")" ; echo -n "$x" | xxd -p 
# Output is: 610a62 
# The trailing newline from the 'echo' command
#   has been "deleted" by Command Substitution

Saya berasumsi pasti ada beberapa sangat alasan signifikan untuk tindakan shell, yaitu Substitusi Perintah, untuk benar-benar menghapus beberapa data dari output perintah yang digantikannya…
tetapi saya tidak dapat memahami yang satu ini, karena tampaknya ini merupakan kebalikan dari apa itu adalah seharusnya untuk melakukan .. yaitu. untuk meneruskan output dari perintah kembali ke proses skrip… Menahan satu karakter tampak aneh bagi saya, tapi saya rasa ada alasan yang masuk akal untuk itu… Saya ingin mengetahui apa alasannya…

Jawaban yang Diterima:

Karena shell pada awalnya tidak dimaksudkan untuk menjadi bahasa pemrograman lengkap.

Cukup sulit untuk menghapus n . yang tertinggal dari beberapa keluaran perintah.
Namun, untuk tujuan tampilan, hampir semua perintah mengakhiri keluarannya dengan n , jadi… harus ada cara sederhana untuk menghapusnya saat Anda ingin menggunakannya di perintah lain. Penghapusan otomatis dengan $() konstruksi adalah solusi yang dipilih.

Jadi, mungkin Anda akan menerima pertanyaan ini sebagai jawaban:

Dapatkah Anda menemukan cara sederhana untuk menghapus n . yang tertinggal? jika ini tidak dilakukan secara otomatis pada perintah berikut?

> echo The current date is "$(date)", have a good day!

Perhatikan bahwa kutipan diperlukan untuk mencegah penghancuran spasi ganda yang mungkin muncul pada tanggal yang diformat.


Linux
  1. Bagaimana Cara Menetapkan Output Perintah Ke Variabel Shell?

  2. Menyimpan Output Perintah Dalam Variabel Shell?

  3. Apa Perbedaan Get Command Output Menggunakan`command`dan $(command) Di Shell??

  1. Mengapa Shell Login 'Sudo -i' Memecah Argumen String Perintah Di Sini-doc?

  2. Mengapa Opsi Ssh -t Menambahkan Cr &Lf Dalam Output yang Dialihkan?

  3. Bagaimana Mengenalinya Jika Output Dari Perintah Atau Skrip Shell Adalah Stdout Atau Stderr?

  1. Mengapa pipa shell ini keluar?

  2. Mengapa menjalankan perintah shell Linux dengan '&'?

  3. Mengapa Ctrl + V tidak menempel di Bash (Linux shell)?