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 1
dan 0
yang akan menjadi singkatan untuk true
dan 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.
0
adalah true
di scripting shell dan 1
adalah false
(benar-benar, setiap non-nol diperlakukan sebagai palsu), dalam kasus orang membaca ini tidak menyadari. Ini mundur dari sebagian besar bahasa pemrograman lainnya.
true
dalam shell. Namun, dalam ekspansi aritmatika, $((...))
status pengembalian dibalik - 1 adalah true
dan 0 false
untuk 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