我想通过迭代多个循环中的值(这里为简单起见,仅使用 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"
如果它们不为空,则使用。