동일한 값을 건너뛰면서 여러 루프(단순화를 위해 여기서는 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
번호가 다른 폴더만 갖고 싶으므로 , 11
및 22
이 33
폴더에 있으면 안 됩니다. 동일한 값을 건너뛰는 편리한 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"
비어 있지 않으면 사용됩니다.