Path

PATH中for循環變數的正確語法是什麼?

  • July 22, 2019

我必須執行以下循環:

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

假設您使用的是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

引用自:https://unix.stackexchange.com/questions/531364