Bagaimana saya bisa membaca input pengguna sebagai array di bash
shell?
command-line
bash
moata_u
sumber
sumber
cat war_and_peace.txt | ./array_test.sh
../array_test.sh < war_and_peace.txt
.Jawaban:
Inilah satu cara untuk melakukannya:
Jika Anda hanya menjalankannya, ia akan terus membaca dari input standar sampai Anda menekan Ctrl + D (EOF). Setelah itu, baris yang Anda masukkan akan masuk
my_array
. Beberapa orang mungkin menganggap kode ini membingungkan. Tubuh loop pada dasarnya mengatakanmy_array = my_array + element
.Beberapa lembar dokumentasi yang menarik:
Panduan Bash-Scripting Lanjutan memiliki bab hebat tentang array
Manualnya dari membaca builtin
15 contoh array dari thegeekstuff.com
sumber
read -r
kadang cukup berguna / penting ... Tautan Stefano ke "read builtin manpage" menjelaskan tujuannya ... (untuk mencegah interpretasi backslash).Baca menggunakan ini:
Dan untuk mencetak, gunakan:
sumber
Dan yang tidak membuat ulang array setiap kali (meskipun membutuhkan bash 3.1 atau yang lebih baru):
Lihat http://mywiki.wooledge.org/BashFAQ/001 untuk lebih lanjut.
Dan seperti biasa, untuk menghindari penulisan bug baca http://mywiki.wooledge.org/BashGuide dan hindari tldp-guide seperti Advanced scripting bash guide.
sumber
IFS
masalahnya. Tanpa membatalkannya, 'baca' membuat semua spasi putih mengarah dan tertinggal ... dan tentu saja-r
terlalu ...Bagaimana dengan one-liner ini;)
Edit:
Di
bash
,adalah cara menugaskan ke array . Dengan menggunakannya bersamaan dengan penggantian perintah, Anda dapat membaca dalam array dari pipeline yang tidak mungkin digunakan
read
untuk mencapai ini dengan cara yang mudah:Anda akan menemukan bahwa itu tidak menghasilkan apa-apa karena fakta bahwa
read
tidak melakukan apa-apa ketikastdin
pipa karena pipa dapat dijalankan dalam subkulit sehingga variabel mungkin tidak dapat digunakan sama sekali.Menggunakan cara yang disarankan oleh jawaban ini:
Ini memberikan
a b
cara yang lebih sederhana dan lebih mudah daripada solusi yang diberikan oleh jawaban nilai Baca ke dalam variabel shell dari pipa dan dalam bash membaca setelah pipa tidak menetapkan nilai .sumber