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