COLUMNS
é definida por bash upon receipt of a SIGWINCH.
(consulte a seção Shell Variables
em man bash
). Não está definido no seu script porque não é uma variável de ambiente. Veja você mesmo:
$ export COLUMNS=$COLUMNS
$ ./your-script.sh
Agora funciona. Você precisa recuperar o valor de COLUMNS
em seu script. Você pode usar tput
, por exemplo:
$ tput cols
186