Uma variável recebe um valor quando é atribuída.
Por exemplo
x=1
definirá o valor da variável x
para 1. O valor não muda a menos que você atribua um novo valor a ele.
Quando você faz
NOW=$(date +"%H")
o shell executará o comando date
e colocará os resultados na variável NOW
. Novamente, o valor não muda a menos que você atribua um novo valor. Não importa que date
seja um comando externo; é executado uma vez quando a variável recebe o valor.
Então, você precisa atribuir o valor dentro do loop ... ou usar uma função.
NOW()
{
date +"%H"
}
Isso não define uma variável, mas uma função. Agora você pode usar isso dentro do seu loop
while [ true ]; do
echo $(NOW)
done
Note que a maneira como você chama é diferente.
Neste caso limitado, podemos simplificar:
while [ true ]; do
NOW
done
O script final seria
#!/bin/bash
NOW()
{
date +"%H"
}
while [ true ]; do
NOW
done