GNU/Linux >> Belajar Linux >  >> Linux

Transformasi Otomatis Baris Baru Dalam Penugasan Variabel Shell?

Ini keluar dari salah satu komentar saya untuk pertanyaan ini mengenai penggunaan bc dalam skrip shell. bc menempatkan jeda baris dalam jumlah besar, mis.:

> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456

Tapi perhatikan mereka tidak benar-benar jeda baris dalam variabel - atau setidaknya tidak ada jika digunakan tanpa tanda kutip. Misalnya, bermain-main dengan lebih banyak pipa dalam tugas, mis.:

num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')

Saya menyadari bahwa meskipun sebenarnya ada \n di bc output, periksa echo $num > tmp.txt dengan hexdump menunjukkan \n (ASCII 10) sudah pasti menjadi spasi (ASCII 32) dalam penugasan variabel.

Atau setidaknya, dalam output $num > yang tidak dikutip . Mengapa demikian?

Seperti yang ditunjukkan fedorqui, jika Anda menggunakan tanda kutip:echo "$num" , Anda mendapatkan baris baru lagi. Ini terbukti dengan memeriksa perbedaan antara echo $num > tmp.1 dan echo "$num" > tmp.2 dengan hexdump; yang pertama berisi \ (spasi garis miring terbalik) sedangkan yang belakangan berisi \\n (garis miring terbalik baris baru).

Jawaban yang Diterima:

echo menempatkan spasi di antara masing-masing dua argumen. Shell menganggap baris baru dalam $num hanya pemisah kata (seperti spasi).

lines="a
b
c"
set -x
echo $lines   # several arguments to echo
echo "$lines" # one argument to echo

Lihat jawaban ini (oleh OP sendiri) untuk penjelasan lebih rinci.


Linux
  1. Apakah Shell Portabel Untuk Menjalankan Perintah Pada Baris Yang Sama Setelah Penetapan Variabel?

  2. Bagaimana cara mendapatkan nama cabang git saat ini menjadi variabel dalam skrip Shell?

  3. Baca nilai ke dalam variabel shell dari pipa

  1. Shell - Tulis konten variabel ke file

  2. Ulangi variabel $PATH menggunakan skrip Shell

  3. linux shell wc -c hitung karakter +1

  1. Menyimpan Output Perintah Dalam Variabel Shell?

  2. Perilaku Tak Terduga Dari Skrip Shell?

  3. Diutamakan Operator Logika Shell &&, ||?