다음 루프를 수행해야 합니다.
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
배열을 사용하려는 것처럼 보입니다.
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