echo "$(( ++my_num ))" | tee "$my_file"
Tee escreve o (s) arquivo (s) nomeado (s) e a saída padrão por padrão.
Depois de typeset -i my_num=$(cat "$my_file")
(que poderia ser typeset -i my_num=$(<"$my_file")
em bash
), você poderia usar
my_num=$(( my_num == 0 ? 1 : my_num ))
para definir como 1 se o valor for zero. Variáveis inteiras em bash
são avaliadas como zero se vazias.
Eu estava sugerindo my_num=${my_num:-1}
, mas como my_num
é uma variável inteira, ela será expandida para zero se estiver vazia, não para a sequência vazia, o que significa que ${variable:-value}
a substituição de parâmetro não funcionaria (isso, de outra forma, se expandiria para value
se a variável não estivesse definida ou vazia).
Eu provavelmente teria escrito a função como
get_next_int () {
local -i val
read val <"$HOME/next_int.json"
val=$(( val == 0 ? 1 : val ))
printf "%d\n" "$(( val + 1 ))" | tee "$HOME/next_int.json"
}
assumindo que "$HOME/next_int.json"
sempre continha um único inteiro. Deixei de fora o touch
porque o registro de data e hora de modificação dos arquivos seria atualizado por tee
(mantenha touch
se você precisar também do registro de data e hora de acesso).