Поведение, с которым вы столкнулись, связано с тем, что эта строка автоматически воссоздает элемент массива, который вы удалили ранее:
printf "The value of arr[\"f\"] after deleting = \"%s\"\n", arr["f"]
См. этот небольшой тест:
$ awk 'BEGIN{a[1];delete a[1];for (i in a) print i}'
# nothing is printed
$ awk 'BEGIN{a[1];delete a[1];a[1];for (i in a) print i}'
1
$ awk 'BEGIN{a[1];delete a[1];print "a[1]=",a[1];for (i in a) print "key found:",i}'
a[1]=
key found: 1
Is there a way to communicate the available scroll region instead of the window size to programs querying the terminal size?
Попробуйте stty rows <lines>
; он установит (черезioctl(TIOCSWINSZ)
)значение, возвращаемое ядром через ioctl(TIOCGWINSZ)
программам, которые его запрашивают.
Ваш эмулятор терминала обновит его при изменении размера окна.
Это сработало для меня (при не очень тщательном тестировании):
winch(){
[ "$LINES" = "$winch_l" ] && return
winch_l=$((LINES-1));
stty rows "$winch_l"
printf '\033[S\033[A' # scroll 1 up, cursor 1 up
printf '\0337' # save cursor (DECSC)
printf '\033[1;%dr' "$winch_l" # set scroll region (DECSTBM)
printf '\0338' # restore cursor (DECRC)
kill -WINCH "$$" # force prompt redraw; ymmv
}
trap winch WINCH
winch