Re: [Linux-programlama] programlama sorusu ?

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Nejat AYDIN (nejataydin@superonline.com)
Date: Fri 06 Jan 2006 - 12:11:53 EET


Recai Oktas wrote:
> * Nejat AYDIN [2006-01-06 04:48:12+0200]
>
>>Mehmet Fatih AKBULUT wrote:
>>
>>>cook tskler. [iki $ eksigi yuzunden baya bi kastim dogrusu.]
>>
>>Sorunun kaynağı '$' eksiği değil, boşluk fazlasıydı (diğer mesajıma
>>bakınız). $((...)) ifadesinin içindeki değişken isimlerinin önüne
>>'$' koymanız gerekmez. Hatta dizinin indeksi de bir aritmetik ifade
>
> [...]
>
> Bash (veya diger bazilarinda ?) gerekmedigi dogru, ama bu tip ifadelerde
> olasi tasinabilirlik problemlerine binaen bir miktar idiyomatik davranmak
> daha uygun olur. O yuzden ben $'lari eklerim/ekledim (VIM'in sozdizimi
> renklendirmesinde degiskenlerin isildamasi da bonusu oluyor :-).

Önceki mesajlarımı, kullanılan shell'in GNU Bash olduğunu varsayarak
yazmıştım. Bu shell'in Linux için taşınabilir olduğunu kabul edebiliriz.

Diğer taraftan, eğer POSIX manasında bir taşınabilirlik isteniyorsa,
bahis konusu olan programda dizi bile kullanmamak gerekirdi. Bildiğim
kadarıyla POSIX'e uyumlu bir shell dizi değişkenlerini desteklemek
zorunda değil, ve yine bildiğim kadarıyla bazı shell'ler (mesela ash)
bunları desteklemiyor.

> Standartlar ne diyor veya demiyor, ilgili POSIX belgelerine bakmak lazim.

En azından IEEE Std 1003.1, ki POSIX ve SUS(Single Unix Specifications)
standartlarının revize edilip birleştirilmiş halidir, konuyla ilgili
direkt olarak bir şey söylemiyor. Ancak, şöyle bir ifade var:

If the shell variable x contains a value that forms a valid integer
constant, then the arithmetic expansions "$((x))" and "$(($x))" shall
return the same value.

Buradan $((x + y)) ile $(($x + $y)) ifadelerinin de aynı değere sahip
olacakları sonucu çıkar mı? Zannetmiyorum. O halde bash'taki bu
özelliğin bir ilave (extension) olduğunu kabul edebiliriz.

> Asagidaki karsilastirma bash/dash icin, ash'de de muhtemelen ayni sonuclar
> alinacaktir:
>
> $ bash -c 'foo=1; bar=2; echo $((foo + bar))'
> 3
> $ dash -c 'foo=1; bar=2; echo $((foo + bar))'
> dash: arith: syntax error: "foo + bar"
> $ dash -c 'foo=1; bar=2; echo $(($foo + $bar))'
> 3

Ben de Korn shell (ksh93) ve zsh ile aynı deneyi yaptım:

$ ksh -c 'foo=1; bar=2; echo $((foo + bar))'
3
$ zsh -c 'foo=1; bar=2; echo $((foo + bar))'
3

ve ek olarak:
$ bash --posix -c 'foo=1; bar=2; echo $((foo + bar))'
3

Bu arada dash ve ash, $((x)) ifadesi için bile hata veriyor:
$ dash -c 'x=42; echo $((x))'
dash: arith: syntax error: "x"
$ ash -c 'x=42; echo $((x))'
arith: syntax error: "x"
(Bu son denemede ash/dash Standart'a göre sınıfta kalmış
görünüyor)

İlgili linkler:
http://www.unix.org/version3/ieee_std.html
http://www.unix.org/single_unix_specification/
http://www.opengroup.org/onlinepubs/009695399/toc.htm
ve konuyla doğrudan alakalı olan:
http://www.opengroup.org/onlinepubs/000095399/utilities/xcu_chap02.html#tag_02_06_04
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.