나는 지난 1년 동안 상대적으로 복잡한 코드를 작성/정제하면서 bash를 배웠습니다. 내 코드는 복잡한 다중 레벨 while 루프가 포함된 함수로 가득 차 있습니다. 저는 최근에 for 루프에 대해 더 많이 배웠습니다. C++와의 유사성 및 구문을 따르기가 더 쉽다는 점을 제외하고 하나를 다른 것보다 사용하는 데 장점/단점이 있는지 궁금합니다.
나의 주요 고려사항은 실행 시간과 다중 레벨 루프와의 호환성입니다. 내 스크립트의 함수(총 5개)는 10,000~800,000회 반복할 수 있으며 강력한 시스템에서 전체 프로세스를 완료하는 데 12~48시간이 걸리므로 신뢰할 수 있다면 아주 약간의 시간 차이도 신경쓰겠습니다. 또한 전반적인 유사성으로 인해 일반적인 포럼/웹 사이트에서는 언급되지 않지만 복잡한 코드에 어떤 방식으로든 영향을 미칠 수 있는 for/while 사이의 다른 가능한 차이점에도 관심이 있습니다. 예를 들어, 하나는 루프 전에 모든 프로세스(및 여유 메모리)를 완료하지만 다른 하나는 그렇지 않습니까? 또는 루프 내에서 호출된 C++ 프로그램과 상호 작용합니다.
다음은 while 루프를 사용하는 다양한 방법을 보여주기 위해 두 가지 함수 코드 구조의 간단한 예입니다.
하나:
var1="1"; var1max=${length}
while IFG=read -r var1lineFULL; do
var1line=`echo ${var1lineFULL} | cut -f 1`
var2="1"; var2max=${length2}
while [ ${var2} -le ${var2max} ]; do
sedvar=`sed -n ${var2}p < file.txt`
wait; <c++ executable command>
<more commands (bash/c++), if statements, echoing, verbose options...>
let var2=var2+1
done
let var1=var1+1
done < anotherfile.txt
둘:
var1="1"
var3="1"; var3max=`cat thirdfile.txt | wc -l`
while [ ${var3} -le ${var3max} ]; do
while IFS=read -r var3line; do
wait; <fickle c++ executable command>
<bash commands.. if, echo, awk, cut, etc.>
let var3=var3+3
done < thirdfile.txt
let var1=var1+1
done
이것이 따라가기에 충분한 의미가 있기를 바랍니다. 참고: 이러한 루프는 작동합니다. 루프가 실행되는 횟수와 출력 파일 이름의 일부를 결정하는 정수를 증가시켜야 하는 방식으로 루프를 만들었습니다. 그들은 또한 많은 텍스트 줄을 생성하는데, 나는 그것을 텍스트 로그에 "3&>"으로 넣었습니다.
그래서 당신은 어떻게 생각하십니까? 증분 배치가 변경되지 않는데 "for"로 전환할 이유가 있나요? 이것을하지 않을 이유가 있습니까? 시차로 인한 피로가 발생합니까?
답변1
처리할 정적 파일 수를 반복하는 것과 같이 루프 전에 반복해야 하는 횟수를 알고 있는 경우 for 루프를 사용해야 합니다. 이것이 for 루프가 잘하는 일입니다. 확실하지 않고 누산기를 특정 값으로 채우는 일종의 반복 집계 알고리즘이나 특정 값이 발견되면 루프를 종료하는 검색 알고리즘과 같이 처리 중에 발생하는 상황에 따라 루프가 다를 수 있는 경우 it 찾고 있는 값을 입력한 다음 while 루프를 사용하세요.
귀하의 경우 반복 횟수를 알고 고정 값만큼만 카운터를 늘리므로 for 루프를 사용해야 합니다.