만약 우리가:
- 그런 다음 배열을 정의하십시오.
- 기능을 정의하고 싶습니다.
- 함수 내부에서 이 배열을 호출합니다.
우리는 할 수 있습니다. 이와 같이:
입력하다:
myArray=('1' '2' '3' '4' '5')
myFunction ()
{
local -n myList="$1";
echo "${myList[@]}";
}
myFunction myArray
산출:
1 2 3 4 5
그러므로 는 의 범위에 ${myArray[@]}
들어간다 .${myList[@]}
myFunction
bash
하지만 이 방법은 버전 4.3.x 에서만 작동합니다.
이전 버전에서 이를 어떻게(그리고 어떻게 할 수 있습니까?)
답변1
이전 bash에서는 "가변 간접 참조"가 필요합니다(4항).쉘 매개변수 확장) 이는 배열에 있어서는 정말 보기 흉한 일입니다.
myArray=('1' '2' '3' '4' '5')
myFunction() {
local arr="${1}[@]" # array expansion *as a string*
local values=( "${!arr}" ) # actual array expansion
echo "${values[@]}"
}
myFunction myArray
1 2 3 4 5
이것은 당신에게복사정렬. 이 기능을 수정하면아니요myArray
외부 범위 변경 :
myFunc2_old () {
local arr="${1}[@]"
local values=( "${!arr}" ) # here's the copy
values[0]=foo
declare -p values
}
myFunc2_old myArray; declare -p myArray
declare -a values=([0]="foo" [1]="2" [2]="3" [3]="4" [4]="5")
declare -a myArray=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")
이름 참조의 반대
myFunc2_ref () {
local -n arr=$1
arr[0]=foo
declare -p arr
}
myFunc2_ref myArray; declare -p myArray
declare -n arr="myArray"
declare -a myArray=([0]="foo" [1]="2" [2]="3" [3]="4" [4]="5")