Bash 스크립트의 함수에 배열 전달

Bash 스크립트의 함수에 배열 전달

저는 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

관련 정보