Aşağıdakileri göz önünde bulundur:
$ 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
Temelde, işlevlerini bildirmek için çalışıyordu 1ve 0bunun için kestirme olur trueve false, ama gördüğünüz gibi ben fonksiyonlarda sayısal isimler kullanarak sorunla karşılaştık. Aynı davranış takma adlarda ve iki basamaklı adlarda da görülür.
Soru "neden"? POSIX tarafından zorunlu kılındı mı? ya da sadece bir bourne benzeri mermi mi?
Bununla ilgili soruya da bakınız .
0olan truekabuk komut dosyası ve 1bir falsebu habersiz okuma durumda herkes, (gerçekten, herhangi olmayan sıfır yanlış olarak kabul edilir). Bu, diğer programlama dillerinin çoğundan geriye dönüktür.
truekabuktadır. Ancak, aritmetik genişleme $((...))dönüş durumları ters çevrilir - 1 trueve 0, falseC dili sözdizimi ile tutarlılık içindir. Örneğin bash -c 'echo $((1==1));echo $((1==2))' bu sorunun dışında yapmaya çalıştığım şey aslında davranışı "tersine çevirdi". Cevabım son örneğe bakın burada tam olarak yapmaya çalıştığım ne olduğunu görmek için. Aptalca bir fikir, ama yine de çalışıyor