Gerando os resultados de um loop for aninhado em um arquivo no bash

Gerando os resultados de um loop for aninhado em um arquivo no bash

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 \ncolocar em nova linha.

informação relacionada