如果使用 Bash >=4.2,nameref 变量将满足您的需要:
#!/usr/bin/env bash
container_1_files=(foo1 bar1 baz1)
container_2_files=(foo2 bar2 baz2 quux)
container_3_files=(foo3 bar3)
containers=(container_1 container_2 container_3)
for container in "${containers[@]}"; do
declare -n container_files="${container}_files"
printf 'Files from %s:\n' "$container"
printf '%s\n' "${container_files[@]}"
done
输出:
Files from container_1:
foo1
bar1
baz1
Files from container_2:
foo2
bar2
baz2
quux
Files from container_3:
foo3
bar3
现在,如果您要为容器引用文件,请将这些文件放置或链接到实际的文件系统目录中,而不是尝试将文件夹/文件层次结构复制到 Bash 数组和动态变量名称中。
作为奖励,它甚至可以使用 POSIX shell 语法:
#!/usr/bin/env sh
mkdir -p -- container_1 container_2 container_3
cd container_1 && { touch foo1 bar1 baz1;} && cd .. || exit
cd container_2 && { touch foo2 bar2 baz2 quux;} && cd .. || exit
cd container_3 && { touch foo3 bar3;} && cd .. || exit
for container in ./container_*; do
printf 'Files from %s:\n' "$container"
for file in "$container/"*; do
printf '%s\n' "${file##*/}"
done
done