Dalam proyek saya, saya memiliki cuplikan berikut:
local output="$(bash "${1##*/}")"
echo "$?"
Ini selalu mencetak nol karena local
, bagaimanapun, menghapus local
menyebabkan $?
variabel berperilaku dengan benar: yang mengasumsikan kode keluar dari subkulit.
Pertanyaan saya adalah: bagaimana saya bisa menjaga variabel ini tetap lokal sementara juga menangkap nilai keluar?
bash
variable
exit-status
Elang Tertinggi
sumber
sumber
shellcheck
tidak hanya akan menangkap masalah ini tetapi menyarankan solusinya di unix.stackexchange.com/a/281749/24718 !Jawaban:
Ini akan bergema
127
, kode kesalahan yang benar untuk "perintah tidak ditemukan".Anda dapat menggunakan
local
untuk mendefinisikan lebih dari satu variabel. Jadi saya juga membuat variabel lokalRET
untuk mengambil kode keluar dari subkulit sebelumlocal
berhasil dan set$?
ke nol.sumber
bash
menilai ekspresi ini dari kiri ke kanan?bash
manual referensi POSIX maupun .Nyatakan variabel lokal sebelum Anda menetapkannya:
Menurut pendapat saya ini juga lebih mudah dibaca daripada mengatur
RET
variabel tambahan . YMMV tentang itu, tetapi berfungsi seperti yang Anda harapkan.sumber
local var1 var2 ...
dan Bob adalah paman Anda.