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
새 줄에 넣는 것을 선호합니다.