COLUMNS LINES でいいわけがない
xtermみたいなターミナルエミュレータでも普通にリサイズされるからな
しらん間にサイズが変更されるttyなんかいくらでもある

ttyのサイズについて、常に正しい値を取得したい場合は
常にttyのサイズが変更されたシグナル(SIGWINCH)を受け取るようにして
毎回、COLUMNS LINESの環境変数を更新し続けるとか工夫しないと難しい

 ↓こんな感じのやりかた
 trap 'COLUMNS=$(tput cols) LINES=$(tput lines)' WINCH

あとはioctrlでTIOCGWINSZをじかにとるぐらいしか思い付かない