중첩된 for 루프에서 동일한 값 건너뛰기

중첩된 for 루프에서 동일한 값 건너뛰기

동일한 값을 건너뛰면서 여러 루프(단순화를 위해 여기서는 2개의 루프 사용)의 값을 반복하여 bash에 디렉터리를 만들고 싶습니다. 데모 예는 다음과 같습니다.

for i in 1 2 3; do for j in 1 2 3; do mkdir $i$j; done, done

이렇게 하면 이름이 명명된 폴더가 제공되지만 11, 12, 13, 21, 22, 23, 31, 32, 33번호가 다른 폴더만 갖고 싶으므로 , 112233폴더에 있으면 안 됩니다. 동일한 값을 건너뛰는 편리한 for 루프 옵션이 있습니까?

또는 모든 폴더를 만든 다음 여러 값을 가진 폴더를 삭제할 수도 있지만 여러 항목이 포함된 여러 루프가 있는 경우 이는 매우 비효율적으로 보입니다.

답변1

참고: 아래 루프는 중괄호 확장을 사용하여 1부터 9까지 실행됩니다. 사용 {1..3}하거나 1 2 3수행정확히질문에서와 같이.

디렉토리를 생성하기 전에 비교 $i하고 서로 다른지 확인하십시오 $j.

for i in {1..9}; do
    for j in {1..9}; do
        [ "$i" -ne "$j" ] && mkdir "$i$j"
    done
done

-ne테스트는 산술 부등식을 테스트합니다. 문자열을 반복하려면 대신 를 사용하십시오 !=. 테스트가 참( $i그리고 $j다르면)이 사용됩니다 mkdir.

[ "$i" -ne "$j" ] && mkdir "$i$j"빨리 쓰는 방법이에요

if [ "$i" -ne "$j" ]; then
    mkdir "$i$j"
fi

다음과 같은 이름을 가진 모든 11디렉토리를 삭제하려면 22:

for i in {1..9}; do
    rmdir "$i$i"
done

이는 디렉토리가 비어 있다고 가정합니다. rm -rf "$i$i"비어 있지 않으면 사용됩니다.

관련 정보