Mengapa Anda harus peduli dengan apa yang saya katakan walaupun ada 250+ jawaban yang mendukung
Bukan itu 0 = true
dan 1 = false
. Yaitu: nol berarti tidak ada kegagalan (sukses) dan bukan nol berarti gagal (tipe N) .
Sementara jawaban yang dipilih secara teknis "benar" tolong jangan cantumkan return 1
** pada kode Anda untuk salah . Ini akan memiliki beberapa efek samping yang tidak menguntungkan.
- Pengembang yang berpengalaman akan melihat Anda sebagai seorang amatir (karena alasan di bawah).
- Pengembang yang berpengalaman tidak melakukan ini (untuk semua alasan di bawah).
- Itu rawan kesalahan.
- Bahkan pengembang yang berpengalaman pun dapat menganggap 0 dan 1 sebagai salah dan benar masing-masing (untuk alasan di atas)
- Itu membutuhkan (atau akan mendorong) komentar asing dan konyol.
- Ini sebenarnya kurang membantu daripada status pengembalian implisit.
Pelajari beberapa bash
The bash manual mengatakan (penekanan)
kembali [n]
Menyebabkan fungsi shell untuk berhenti mengeksekusi dan mengembalikan nilai n ke pemanggilnya. Jika n tidak diberikan , nilai kembali adalah status keluar dari perintah terakhir yang dijalankan dalam fungsi.
Karena itu, kita tidak perlu menggunakan 0 dan 1 untuk menunjukkan Benar dan Salah. Fakta bahwa mereka melakukannya pada dasarnya pengetahuan sepele yang hanya berguna untuk debugging kode, pertanyaan wawancara, dan meniup pikiran pemula.
Manual bash juga mengatakan
jika tidak, status pengembalian fungsi adalah status keluar dari perintah terakhir yang dijalankan
Manual bash juga mengatakan
( $? ) Memperluas status keluar dari pipa latar depan yang baru saja dieksekusi .
Tunggu sebentar. Pipa? Mari kita beralih ke manual bash sekali lagi.
Pipeline adalah urutan satu atau lebih perintah yang dipisahkan oleh salah satu operator kontrol '|' atau '| &'.
Iya. Mereka mengatakan 1 perintah adalah sebuah pipa. Karena itu, ketiga kutipan tersebut mengatakan hal yang sama.
$?
memberi tahu Anda apa yang terjadi terakhir.
- Itu meluap.
Jawabanku
Jadi, sementara @Kambus menunjukkan hal itu dengan fungsi yang begitu sederhana, tidakreturn
diperlukan sama sekali. Saya pikir itu sangat sederhana dibandingkan dengan kebutuhan kebanyakan orang yang akan membaca ini.
Mengapa return
?
Jika suatu fungsi akan mengembalikan status keluar perintah terakhirnya, mengapa digunakan return
? Karena itu menyebabkan fungsi untuk berhenti mengeksekusi.
Hentikan eksekusi dalam berbagai kondisi
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
Apa yang kita miliki di sini adalah ...
Line 04
adalah [-ish] eksplisit yang mengembalikan true karena RHS &&
hanya dieksekusi jika LHS benar
Line 09
mengembalikan true atau false yang cocok dengan status baris08
Baris 13
mengembalikan false karena garis12
(Ya, ini bisa diturunkan, tetapi seluruh contoh dibuat-buat.)
Pola umum lainnya
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
Perhatikan bagaimana pengaturan status
variabel demistifikasi makna $?
. (Tentu saja Anda tahu apa $?
artinya, tetapi seseorang yang kurang berpengetahuan daripada Anda harus Google itu suatu hari nanti. Kecuali jika kode Anda melakukan perdagangan frekuensi tinggi, tunjukkan cinta , tentukan variabelnya.) Tetapi kesimpulan sebenarnya adalah bahwa "jika tidak ada status "atau sebaliknya" jika status keluar "dapat dibacakan dengan lantang dan jelaskan artinya. Namun, yang terakhir mungkin agak terlalu ambisius karena melihat kata itu exit
mungkin membuat Anda berpikir itu keluar dari skrip, padahal kenyataannya keluar dari $(...)
subkulit.
** Jika Anda benar-benar bersikeras menggunakan return 1
untuk false, saya sarankan setidaknya Anda gunakan return 255
sebagai gantinya. Ini akan menyebabkan diri Anda di masa depan, atau pengembang lain yang harus menjaga kode Anda mempertanyakan "mengapa itu 255?" Maka mereka setidaknya akan memperhatikan dan memiliki kesempatan yang lebih baik untuk menghindari kesalahan.
function
kata kunci,myfun() {...}
cukup