Terdapat banyak sebab mengapa seseorang ingin mengembalikan array BASH:
- Menguruskan jangka hayat tatasusunan lebih mudah kerana disusun secara tempatan.
- Untuk pencapaian tepat pada waktunya, mendapatkan susunan dari kaedah boleh membantu.
- Untuk menyokong teknik algoritma log, nama kaedah yang mengembalikan tatasusunan dapat dibuang.
Anda mungkin percaya bahawa Bash kehilangan keupayaan untuk mengembalikan susunan fungsi. Namun, itu tidak betul. Adalah mungkin untuk memindahkan susunan yang dihasilkan ke metode dengan rujukan, dengan mengambil petunjuk dari pembangun C / C ++. Strategi sedemikian memungkinkan kaedah untuk terus bebas dari rujukan ke arah pemboleh ubah global. Artikel berikut menunjukkan contoh kes yang jelas.
Contoh 1: Mengembalikan Array
Log masuk ke sistem Linux anda dan buka terminal arahan untuk meneruskan. Kami akan membuat fail Bash bernama "skrip.sh ”menggunakan sentuhan arahan untuk mengembalikan array menggunakan fungsi Bash. Skripnya adalah seperti berikut:
skrip $ sentuh.sh
Anda dapat melihat fail yang baru dibuat di Rumah direktori. Buka fail ini dan tuliskan kod yang dilampirkan ke dalamnya sebagaimana adanya. Di sini, kami berusaha untuk membuat susunan asosiatif melalui argumen dalam kaedah dari lulus senarai.
Pada mulanya, kami telah membuat fungsi foo ().
Di dalam program ini, kami telah menghapus istilah "mendeklarasikan", yang merupakan perintah Bash yang telah dikonfigurasikan sebelumnya yang memungkinkan kita mengubah atau menyesuaikan atribut, metode shell yang dioleskan ke pembolehubah, dan menunjukkan nilai atribut ini di jangka masa terminal komando shell kami. Lebih-lebih lagi, ia boleh digunakan untuk menentukan pemboleh ubah panjang. Terakhir, ia digunakan untuk menentukan pemboleh ubah.
Kami telah menambahkan nilai "fooval" ke array "arr".
Kata kunci "-A" digunakan untuk membuat NAMA susunan bersekutu jika disokong. Kita mesti menggunakan senarai / array sebagai pemboleh ubah global, yang menunjukkan bahawa hanya satu kaedah, bukan skrip, yang dapat melakukan tindakan ini.
Kami juga telah membuat array lain, bernama "myarr," untuk digunakan sebagai rujukan. Bash membenarkan nama arr pemboleh ubah relatif tidak sama dengan nama myarr pemboleh ubah relatif.
Setelah itu, di baris kelapan, kami telah menyampaikan array "myarr" ke Bash foo () berfungsi sebagai rujukan.
Pada masa lalu, kami menggunakan gelung "untuk" untuk mencetak array "arr" dan "myarr" ke foo () fungsi.
Kami sekarang akan memeriksa hasil kod ini. Jalankan perintah Bash untuk menjalankan kod di atas. Anda dapat melihat bahawa array telah dikembalikan ke fungsi dan kemudian dicetak.
skrip $ bash.sh
Contoh 2: Mengembalikan Array yang lain
Mari kita lihat contoh lain untuk mengembalikan tatasusunan ke fungsi. Buka terminal arahan anda dan buat fail baru bernama "openvpn.log ”menggunakan sentuhan perintah, seperti berikut:
$ sentuh openvpn.balak
Sekarang, buka "openvpn.log ”fail, dan tulis teks berikut ke dalam fail ini, seperti yang ditunjukkan. Simpan fail ini dan tutup.
Sekali lagi, buka shell arahan dan buat fail lain bernama “script.sh, "menggunakan sentuhan arahan untuk menambah skrip Bash ke fail.
skrip $ sentuh.sh
Seterusnya, buka skrip “.sh ”fail dan tambahkan kod berikut ke dalam fail ini sebagaimana adanya. Simpan dan tutup fail ini. Skrip ini akan menggunakan kaedah yang membaca nilai / rentetan dari dokumen dan mengembalikan array:
- Menyatakan array: klien
- Peruntukkan susunan kaedah yang dikembalikan untuk menyusun pelanggan
- Tunjukkan array: pelanggan
Sekarang mari kita lihat secara terperinci cara kerja skrip ini.
- Kami telah menyatakan susunan global "klien" menggunakan kata kunci "menyatakan", diikuti dengan "-A."
- The ReadArray () fungsi telah ditentukan. Dalam fungsi ini, kami telah menyatakan beberapa pemboleh ubah tempatan. Pembolehubah tempatan "array" kosong, tetapi "i" dan "j" telah ditentukan dengan nilai 0 untuk digunakan sebagai iterator.
- Dengan menggunakan mod baca, kita akan membaca teks dari fail menggunakan iterator untuk meningkatkan indeks.
- Baris "pelanggan [$ ((i ++))] + = $ LINE;" digunakan untuk menambahkan baris teks ke pemboleh ubah array "klien" yang ditentukan secara global.
- Selepas itu, "j ++" melonjak ke indeks seterusnya.
- Pemboleh ubah "$ 1" digunakan untuk menyimpan dan mengembalikan array yang baru dibuat dari "openvpn.fail teks log.
- Di bagian luar fungsi, string telah dinyatakan sebagai "$ string" dan telah diberi jalur file sebagai nilai.
- Rentetan ini telah dihantar ke bacaArray berfungsi sebagai rujukan untuk membaca teks dari fail ini.
- Setelah itu, array "klien" telah dicetak, dan seluruh teks di dalamnya telah dipaparkan dalam satu baris.
- Sekarang, kami akan memaparkan mesej bahawa array tidak lagi kosong.
- Gelung "untuk" telah digunakan untuk mengubah isi array "klien" menjadi jenis array dan menyatakan indeks untuk isi menggunakan pernyataan "echo" $ i: $ klien [$ i]."
- Akhirnya, kami memaparkan mesej dan mencetak beberapa nilai array yang ditukar secara berasingan sebagai satu kedudukan array yang diindeks.
Mari kita periksa output skrip Bash ini. Jalankan perintah Bash untuk melaksanakan skrip “.fail sh ”. Seperti yang anda lihat, pernyataan gema pertama akan mencetak semua teks dari "openvpn.log ", yang telah disimpan dalam array" klien "sebagai satu baris. Pernyataan gema kedua akan memaparkan mesej rentetan. Pernyataan gema ketiga akan memaparkan array "klien" dalam bentuk terindeks, seperti yang baru saja ditukar. Yang keempat akan memaparkan semula mesej. Yang terakhir akan memaparkan kandungan array "pelanggan" secara individu.
Kesimpulannya
Artikel ini menunjukkan kepada anda cara mengembalikan tatasusunan (terutama susunan asosiatif) ke fungsi menggunakan perintah "deklarasi" terbina dalam dengan dua contoh. Saya harap artikel ini dapat membantu anda memahami topik ini dengan lebih baik.