跳过嵌套 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"如果它们不为空,则使用。

相关内容