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

쉘을 사용한다고 가정하면 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

관련 정보