Tenho tentado criar um arquivo fora do meu loop em bash, consegui gerar o arquivo com o seguinte código
for ((i = 0; i <= 5; i++)); do
for ((j = i; j <= 5; j++)); do
echo -e "$i $j" >> numbers.txt
done
done
no entanto, quero que meus resultados sejam divulgados da seguinte maneira
01
02
03
etc.
Mas o resultado que estou obtendo é semelhante a este
0 0 1 0 2 0 3 0 4 0 5 1 1 1 2 1 3 1 4 1 5 2 2 2 3 2 4 2 5 3 3 3 4 3 5
Como posso resolver isso ?
Responder1
bash
temEstilo C para loops, mas estilisticamente eles são um pouco estranhos de usar quando você não precisa. E se você realmente fizer absolutamenteterpara,vocêpoderestar usando a linguagem errada. (Para este caso de uso, o shell é adequado, é claro.)
Uma maneira muito mais semelhante a um shell de fazer isso (na minha opinião) é:
for i in {0..5}; do for j in $(seq "$i" 5); do echo "$i$j"; done; done
Aqui está outra abordagem:
(set {0..5}; for i; do for j; do [ "$i" -le "$j" ] && echo "$i$j"; done; done)
Eu os escrevo como one-liners adequados para um shell interativo, mas eles funcionam igualmente bem em formato estruturado (o que normalmente seria preferível em um script):
set {0..5}
for i; do
for j; do
[ "$i" -le "$j" ] &&
printf '%d%d\n' "$i" "$j"
done
done
Responder2
for ((i = 0; i <= 5; i++)); do
for ((j = i; j <= 5; j++)); do
echo -e "${i}${j}\n" >> numbers.txt
done
done
Deve resolver o problema. Retirei o espaço, prefiro usar {}
's em volta das minhas variáveis e \n
colocar em nova linha.