PATH 中 for 循环变量的正确语法是什么?

PATH 中 for 循环变量的正确语法是什么?

我必须执行以下循环:

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

假设您正在使用bashshell,看起来您想使用数组:

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

相关内容