Bagaimana Anda keluar dari suatu fungsi jika kondisi benar tanpa mematikan seluruh skrip, cukup kembali ke sebelum Anda memanggil fungsi.
Contoh
# Start script
Do scripty stuff here
Ok now lets call FUNCT
FUNCT
Here is A to come back to
function FUNCT {
if [ blah is false ]; then
exit the function and go up to A
else
keep running the function
fi
}
set -e
menyetel di bagian atas skrip dan Andareturn 1
atau nomor lain selain 0, seluruh skrip Anda akan keluar.||
maka dimungkinkan untuk mengembalikan kode bukan nol dan skrip tetap dijalankan.set -e
dan mengembalikan nilai bukan nol, karena hal itu mengejutkan saya di masa lalu.Gunakan
return
operator:function FUNCT { if [ blah is false ]; then return 1 # or return 0, or even you can omit the argument. else keep running the function fi }
sumber
Jika Anda ingin kembali dari fungsi luar dengan kesalahan tanpa
exit
ing, Anda dapat menggunakan trik ini:do-something-complex() { # Using `return` here would only return from `fail`, not from `do-something-complex`. # Using `exit` would close the entire shell. # So we (ab)use a different feature. :) fail() { : "${__fail_fast:?$1}"; } nested-func() { try-this || fail "This didn't work" try-that || fail "That didn't work" } nested-func }
Mencoba itu:
$ do-something-complex try-this: command not found bash: __fail_fast: This didn't work
Ini memiliki manfaat tambahan / kelemahan yang anda dapat mematikan fitur ini:
__fail_fast=x do-something-complex
.Perhatikan bahwa ini menyebabkan fungsi terluar mengembalikan 1.
sumber
fail
, apa yang dilakukan titik dua di sini?:
adalah operator bash built-in yang merupakan "no-op". Ini mengevaluasi ekspresi tetapi tidak melakukan apa pun dengannya. Saya menggunakannya untuk melakukan substitusi variabel yang akan gagal jika variabel tidak ditentukan, yang jelas tidak.do-something-complex
? <code> checkPara () {if [$ 1 -lt $ 2]; lalu echo $ 3; fi; } do-something-complex () {checkPara $ # 1 "Beberapa pesan di sini untuk memperingatkan pengguna bagaimana menggunakan fungsi tersebut." echo "yes"} </code> Saya akando-something-complex
menampilkan beberapa pesan kepada pengguna dan segera mengembalikan jika tidak ada parameter yang diumpankan ke fungsi tersebut.checkPara
akan menggunakanfail
fungsi saya untuk keluar dari seluruh tumpukan fungsi.code
blok tidak berfungsi di komentar di stackoverflow). Itu terus berjalan setelahnyacheckPara
.