我正在尝试在一个命令中创建多个目录和子目录(即避免 for 循环),如下所示:
mkdir -p {20..30}/{1..5}
这没问题,创建了 10 个目录,并在每个目录中创建了另外 5 个目录。一切都很好。
但是我想用数组替换子目录,但这并不像我预期的那样工作。
例如,如果我创建:
tru=(1 2 3 4 5)
然后做:
mkdir -p {20..30}/${tru[@]}
这被解释为
mkdir -p {20..30}/1 2 3 4 5
并且仅创建一个名为“1”的子目录。
如何让 mkdir 以与 {1..5} 类似的方式解释我的新数组?
您使用
mkdir -p {20..30}/{1..5}
的工作示例是 大括号扩展。其函数中隐含的是类似循环的行为:
$ printf "%s\n" {1..3}/{10..13}
1/10
1/11
1/12
1/13
2/10
2/11
2/12
2/13
3/10
3/11
3/12
3/13
${array[@]}
的数组扩展有所不同:
$ arr=(10 11 12 13)
$ printf "%s\n" {1..3}/${arr[@]}
1/10
2/10
3/10
11
12
13
因此,获得所需内容的唯一方法是使用显式循环:
for outer in {10..20}; do
for inner in "${tru[@]}"; do
mkdir -p "$outer/$inner"
done
done