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 1
ve 0
bunun için kestirme olur true
ve 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 .
0
olan true
kabuk komut dosyası ve 1
bir false
bu 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.
true
kabuktadır. Ancak, aritmetik genişleme $((...))
dönüş durumları ters çevrilir - 1 true
ve 0, false
C 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