bc
'u kullanarak onaltılık bir sayıyı ondalık sayıya dönüştüren küçük bir işlev yazdım. Doğrudan çağrıldığında, çalışır, ancak başka bir işlevde tek bir deyimden birden çok kez çağrıldığında, başarısız olur. İşte İşlev, bir işlevden çağrıldığında aynı davranışı göstermiyor
awk 'function hd(h) {
cmd=sprintf("echo \"ibase=16; obase=A; %s\"|bc", h);
cmd|getline d;
printf("hd(%s)=%s\n", h, d);
return d;
}
function test() {
printf("A=%d, FF=%d\n", hd("A"), hd("FF"));
}
BEGIN {
printf("A=%d, FF=%d\n", hd("A"), hd("FF"));
test();
}'
bu çıktısı:: İşte
sorunu yeniden oluşturmak için bir demo senaryo
hd(A)=10
hd(FF)=255
A=10, FF=255
hd(A)=255
hd(FF)=255
A=255, FF=255
Gördüğünüz gibi, işe yarıyor BEGIN
doğrudan infaz; Ancak, test()
işlevi aracılığıyla yürütüldüğünde, başarısız olur.
GNU Awk 3.1.5 kullanıyorum. GNU Awk 4.1.1'i başka bir makinede denedim, benzer bir şekilde başarısız oluyor.
Vay, güzel. Ben senin P.S'yi anlamadım. gerçi. –
@BenoitDuffez 'printf"% d ", 5' vs' printf ("% d", 5) ' – Kent
Oh, anladım. Ben sadece daha net buluyorum, ama parantezi atlamak daha doğru sanırım. Bu konu için teşekkürler. –