如何使用数组在 bash 中使用 mkdir 创建子目录?

问题描述 投票:0回答:1

我正在尝试在一个命令中创建多个目录和子目录(即避免 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} 类似的方式解释我的新数组?

arrays bash mkdir
1个回答
0
投票

您使用

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
© www.soinside.com 2019 - 2024. All rights reserved.