저는 bash 스크립팅과 bash 스크립트 작성이 처음입니다. 배열을 선언하고 값을 지정했습니다. 그런데 루프에서 배열을 전달하면 값이 루프에 들어가지 않습니다. 아래는 내 코드입니다
declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
command_to_get_filesizes() {
for i in "${!files[@]}"; do
echo Processing file "${i[${index}]}"
done
}
command_to_get_filesizes
예상 출력
A1S0
D1s0
D2S0
D3S0
D5S0
D680
하지만 내가 얻는 결과는
Processing file 0
Processing file 1
Processing file 2
Processing file 3
Processing file 4
Processing file 5
Processing file 6
누구든지 배열의 값을 인쇄하도록 도와줄 수 있나요?
답변1
변수 'index'가 정의되지 않았습니다. 당신의 의도는
echo Processing file "${files[i]}"
원작의 역할이 모호하다. 모든 변수는 (아마도) 0번째 요소를 갖는 배열입니다. (시도해보세요 echo "${PATH[$junk]}"
.) 전체 구성은 "${i[${index}]}"
다음과 같이 해결됩니다 ${i[0]}
. 이것은 단지 echo 입니다 $i
.
제목이 약간 오해의 소지가 있습니다. 배열을 함수에 매개변수로 전달하지 않고 단지 전역 배열 변수일 뿐입니다.
@Siva는 배열 값을 간단히 반복할 수 있다는 점에서 정확합니다. 그러나 동일한 반복에서 인덱스와 값이 모두 필요한 경우에는 이 방법이 적합합니다.
for n in "${!N[@]}"; do
printf '%8d %s\n' "${n}" "${N[n]}"
done
답변2
예상 출력을 기준으로
echo
이 명령에는 "프로세스 파일"이 필요하지 않습니다 .- 루프에서 배열을 반복할 때 배열의 인덱스 값을 전달할 필요가 없습니다
for
.
다음과 같이 시도하다
declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
command_to_get_filesizes()
{
for i in "${files[@]}"; do
echo "$i"
done
}
command_to_get_filesizes