Solução extra simples: para executar um "sem fim", basta definir o limite para um número insanamente grande. Um inteiro de 32 bits pode conter números até 4294967296. Permitindo um bit de sinal e arredondando para baixo, podemos supor que podemos contar até pelo menos 2000000000. Como você está dormindo por pelo menos um minuto entre as contagens, isso funciona por até, oh, cerca de 4000 anos.
Então faça:
if [ "$reps" = 0 ]; then
reps=2000000000
fi
E hardwire a condição para ser
while [ "$n" -le "$reps" ]; do ...
(Se você estiver executando um sistema de 64 bits, você pode contar ainda mais. Não que isso importe. Se você estiver executando um sistema de 16 bits, provavelmente será parafusado de outras maneiras também .)
Solução simples: Basta fazer uma função para verificar se reps
é zero ou n
é menor que reps
.
keep_going() {
[ "$reps" = 0 ] && return 0
[ "$n" -le "$reps" ]
}
e, em seguida, faça a condição
while keep_going; do ...
Sim, você chamará uma função a cada vez. Não, não importa, pois você só faz isso uma vez por minuto no máximo. (E se você se preocupou em ser rápido, você não deveria usar o shell para fazer isso.)
A solução que você está procurando: Use eval
. Com as aspas duplas na atribuição para while="[ $n -lt $count ]"
, $n
e $count
serão expandidas imediatamente. O que você precisa é usar aspas simples na atribuição: while='[ $n -lt $count ]'
e, em seguida, executar a sequência por meio de eval
para que as variáveis sejam expandidas.
while='[ $n -lt $count ]'
while eval "$while" ; do ...