Se você imprimir $NUM
, depois
NUM=$(wc -l "$text")
você provavelmente verá (no Linux) um número e um nome de arquivo na mesma linha, com algum espaço em branco.
Por exemplo:
1842 basic.c
Essa string não é um número, e você normalmente leria apenas o primeiro token com sua escolha de shell / sed / awk, etc., para usar esse como um número.
@steeldriver sugere isso para obter apenas o número:
NUM=$(wc -l < "$text")
que funciona (testado com o Debian).