중첩된 for 루프의 결과를 bash의 파일로 출력

중첩된 for 루프의 결과를 bash의 파일로 출력

bash의 루프에서 파일을 생성하려고 시도했는데 다음 코드를 사용하여 파일을 생성하는 데 성공했습니다.

for ((i = 0; i <= 5; i++)); do
  for ((j = i; j <= 5; j++)); do
    echo -e "$i $j" >> numbers.txt
  done 
done

그러나 나는 결과가 다음과 같은 방식으로 나오길 원합니다.

 01

 02

 03

등.

하지만 내가 얻는 결과는 이것과 비슷합니다

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

이 문제를 어떻게 해결할 수 있나요?

답변1

bash 가지다C 스타일의 for 루프이지만 스타일상 꼭 필요하지 않을 때 사용하기에는 약간 이상합니다. 그리고 만약 정말로 그렇게 한다면가지다에게,~할 것 같다잘못된 언어를 사용하고 있다. (이 사용 사례에서는 물론 쉘이 좋습니다.)

(제 생각에는) 이 작업을 수행하는 훨씬 더 쉘과 유사한 방법은 다음과 같습니다.

for i in {0..5}; do for j in $(seq "$i" 5); do echo "$i$j"; done; done

또 다른 접근 방식은 다음과 같습니다.

(set {0..5}; for i; do for j; do [ "$i" -le "$j" ] && echo "$i$j"; done; done)

나는 이것을 대화형 셸에 적합한 한 줄로 작성했지만 구조화된 형식에서도 동일하게 잘 작동합니다(일반적으로 스크립트에서 선호됨).

set {0..5}
for i; do
  for j; do
    [ "$i" -le "$j" ] &&
      printf '%d%d\n' "$i" "$j"
  done
done

답변2

for ((i = 0; i <= 5; i++)); do
  for ((j = i; j <= 5; j++)); do
    echo -e "${i}${j}\n" >> numbers.txt
  done 
done

트릭을 수행해야합니다. 공백을 제거하고 {}변수 주위에 '를 사용하고 \n새 줄에 넣는 것을 선호합니다.

관련 정보