GNU/Linux >> Belajar Linux >  >> Linux

Fungsi Dalam Variabel Shell?

Saya membaca posting ini tentang penggunaan fungsi dalam variabel bash Shell. Saya mengamati bahwa untuk menggunakan fungsi shell, kita harus mengekspornya dan menjalankannya di shell anak sebagai berikut:

$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function

Saya ingin bertanya apakah mungkin fungsi didefinisikan dalam variabel bash shell sehingga dapat dijalankan di shell saat ini tanpa menggunakan ekspor &menjalankan shell baru ?

Jawaban yang Diterima:

Tidak, Anda tidak bisa.

Jika Anda ingin menggunakan fungsi di shell saat ini, cukup definisikan kemudian gunakan nanti:

$ foo() { echo "Inside function"; }
$ foo
Inside function

Sebelum hari Shellshock, Anda dapat menyimpan fungsi di dalam variabel, mengekspor variabel, dan menggunakan fungsi di sub-kulit, karena bash mendukung fungsi ekspor, bash akan menempatkan definisi fungsi dalam variabel lingkungan seperti:

foo=() {
  echo "Inside function"
}

kemudian interpretasikan fungsinya dengan mengganti = dengan ruang. Tidak ada niat untuk menempatkan fungsi dalam variabel dan merujuk ke variabel yang akan menjalankan fungsi.

Sekarang, setelah Stéphane Chazelas menemukan bug, fitur itu dihapus, tidak ada definisi fungsi yang disimpan dalam variabel lingkungan biasa lagi. Sekarang fungsi yang diekspor akan dikodekan dengan menambahkan awalan BASH_FUNC_ dan akhiran %% untuk menghindari bentrok dengan variabel lingkungan. bash interpreter sekarang dapat menentukan apakah mereka adalah fungsi shell terlepas dari konten variabel. Anda juga perlu mendefinisikan fungsi dan mengekspornya secara eksplisit untuk menggunakannya di sub-kulit:

$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function

Bagaimanapun, jika contoh Anda bekerja dengan bash Anda saat ini , maka Anda menggunakan versi yang rentan.


Linux
  1. Impor fungsi dan variabel ke Bash dengan perintah sumber

  2. Mengatur Variabel Lingkungan Shell | Kulit BASH

  3. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  1. Menyesuaikan shell Bash

  2. Manakah Parameter/variabel Khusus Shell (bash)?

  3. Berbagi Variabel di Beberapa Skrip Shell?

  1. Referensi Nama Edaran Dalam Fungsi Bash Shell, Tapi Tidak Di Ksh?

  2. Cara Membuat dan Memanggil Fungsi di Bash

  3. Dapatkan daftar nama fungsi dalam skrip shell