我必须执行以下循环:
root1=path/to/root1
root2=path/to/root2
for i in {1..2}; do ${root${i}}; done
它不给出所需的输出:
path/to/root1
path/to/root2
管理员建议线程带来的解决方案不会导致我寻求的结果,例如
for i in {1..2}; do \$root$i; done
输出:
$root1
$root2
答案1
假设您正在使用bash
shell,看起来您想使用数组:
root[1]=path/to/root1
root[2]=path/to/root2
for i in {1..2}; do
printf '%s\n' "${root[i]}"
done
或者,将赋值写入root
单个数组赋值(请注意,bash
除非使用显式索引,否则数组中的第一个索引为 0),
root=( path/to/root1 path/to/root2 )
for i in {0..1}; do
printf '%s\n' "${root[i]}"
done
和/或,循环数组的值(不是它的索引),
root=( path/to/root1 path/to/root2 )
for i in "${root[@]}"; do
printf '%s\n' "$i"
done
(仅输出数组,不需要循环,printf '%s\n' "${root[@]}"
足以在单独的行上打印数组的值)
一般来说,您可能不知道数组使用哪些索引(数组可能具有不连续的索引),因此要循环可用的索引,您可以循环"${!root[@]}"
:
root=( path/to/root1 path/to/root2 )
for i in "${!root[@]}"; do
printf '%s\n' "${root[$i]}"
done