GNU/Linux >> Belajar Linux >  >> Linux

bash:atur variabel array env dan de-referensi dari skrip shell gagal

Baca panduan halus, bagian "bug".

Variabel array mungkin belum (belum) diekspor.

Padahal, saya tidak tahu banyak yang menganggap ini bug yang sebenarnya. Shell lain yang mendukung array gaya ksh juga tidak mengizinkan untuk mengekspornya.

Anda dapat membagikan definisi array dengan lebih mudah, melalui parameter atau variabel atau lingkungan. Ini biasanya tidak terlalu berguna.

function f {
    unset -v "$2"
    typeset "$2"
    eval "${!1}"
    typeset -p "$2"
}

typeset -a a=(a b c)
myArr=$(typeset -p a) f myArr a

Kesalahpahaman adalah dalam berpikir bahwa variabel lingkungan hanya digunakan oleh shell - sebenarnya tidak. Tidak ada atribut, termasuk readonly, integer, dan array, yang dapat diekspor ke blok lingkungan. Variabel lingkungan dapat dibaca oleh bahasa apapun, C, C++, Perl, Java, Python, PHP, dan seterusnya. Mereka juga ada di Windows.

Jadi, bagaimana bahasa lain dapat mendukung atribut khusus Bash? Semua variabel lingkungan dikonversi menjadi string, kecuali di Bash di mana nilai array tidak diekspor sama sekali.

Korn shell hanya akan mengekspor elemen pertama. ksh93 juga melakukan beberapa exec eksploitasi untuk mempertahankan atribut variabel yang diekspor ke anak Korn shell.

Omong-omong, penggunaan HURUF BESAR untuk nama variabel dianggap praktik yang buruk, karena dapat bertabrakan dengan yang digunakan oleh shell. Selain itu, di Bash 3, nama STRING mengalami masalah saat diekspor (diperbaiki di Bash 4).


Linux
  1. Bagaimana cara ftp dan Mengunduh file dari Skrip Shell UNIX?

  2. Format tanggal dan waktu untuk skrip atau variabel shell Linux

  3. Skrip Bash:Menggunakan perintah skrip dari skrip bash untuk mencatat sesi

  1. Buka Vim dari dalam skrip Bash Shell

  2. Cakupan variabel untuk skrip bash shell dan fungsi dalam skrip

  3. Di mana variabel PATH diatur di Ubuntu?

  1. Variabel Lingkungan Linux:Cara Membaca dan Mengatur di VPS Linux

  2. Ekspor variabel dari bash dan gunakan dengan Python

  3. bash + baca variabel &nilai dari file dengan skrip bash