Я написал небольшую функцию, которая преобразует шестнадцатеричное число в десятичное с помощью bc
. При вызове напрямую он работает, однако, когда он вызывается несколько раз из одного оператора в другой функции, он терпит неудачу.Функция не имеет такого же поведения, если вызвана из функции
Вот демонстрационный сценарий, чтобы воспроизвести проблему:
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();
}'
Вот результат этого:
hd(A)=10
hd(FF)=255
A=10, FF=255
hd(A)=255
hd(FF)=255
A=255, FF=255
Как вы можете видеть, когда выполняется непосредственно в BEGIN
, он работает; однако при выполнении функции test()
она терпит неудачу.
Я использую GNU Awk 3.1.5. Я также попробовал GNU Awk 4.1.1 на другой машине, он не работает аналогичным образом.
Ничего себе, хорошо. Я не понимал вашу P.S. хоть. –
@BenoitDuffez 'printf"% d ", 5' vs' printf ("% d", 5) ' – Kent
О, я вижу. Я просто нахожу это более ясным, но я думаю, что более строго опустить круглые скобки. Спасибо за это замечание. –