Pertimbangkan yang berikut ini:
$ ksh -c '1(){ echo hi;};1'
ksh: 1: invalid function name
$ dash -c '1(){ echo hi;};1'
dash: 1: Syntax error: Bad function name
$ bash -c '1(){ echo hi;};1'
bash: `1': not a valid identifier
bash: 1: command not found
$ mksh -c '1(){ echo hi;};1'
hi
Pada dasarnya, saya mencoba untuk mendeklarasikan fungsi 1dan 0yang akan menjadi singkatan untuk truedan false, tetapi seperti yang Anda lihat saya mengalami masalah dengan menggunakan nama numerik dalam fungsi. Perilaku yang sama terjadi dengan alias dan nama dua digit.
Pertanyaannya adalah "mengapa"? Apakah itu diamanatkan oleh POSIX? atau hanya kekhasan cangkang mirip bourne?
Lihat juga pertanyaan terkait dengan yang ini.
0adalah truedi scripting shell dan 1adalah false(benar-benar, setiap non-nol diperlakukan sebagai palsu), dalam kasus orang membaca ini tidak menyadari. Ini mundur dari sebagian besar bahasa pemrograman lainnya.
truedalam shell. Namun, dalam ekspansi aritmatika, $((...))status pengembalian dibalik - 1 adalah truedan 0 falseuntuk konsistensi dengan sintaks C-language. Coba misalnya bash -c 'echo $((1==1));echo $((1==2))' Apa yang saya coba lakukan di luar pertanyaan ini sebenarnya "membalikkan" perilaku. Lihat contoh terakhir pada jawaban saya di sini untuk melihat apa sebenarnya yang saya coba lakukan. Gagasan konyol, tapi tetap berhasil