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.