배열을 함수에 전달하는 경우:
func()
{
echo $1
echo $2
echo $3
}
myArray=("This" "Is" "An Array")
func "${myArray[@]}"
그러면 배열의 각 요소가 함수의 별도 매개변수로 전달됩니다.
함수의 한 매개변수가 전체 배열만 수신하도록 하는 방법이 있습니까?
답변1
어느 정도는 가능합니다. Bash 및 ksh93에는 포인터와 유사한 이름 참조가 있어 배열을 전달할 수 있습니다.이름해당 기능으로 이동하여 거기에서 사용하십시오.
#!/bin/bash
function byname {
typeset -n _p=$1
echo "second item of '$1' is ${_p[1]}"
echo "second arg to this function is \"$2\""
}
blah=(a b c)
byname blah "other arg"
하지만 Bash에서는 nameref의 이름( _p
여기서)은 그것이 가리키는 변수의 이름과 달라야 하므로 재귀 함수에는 덜 유용합니다. ksh에서는 ksh 스타일 함수에서 동일한 이름( function foo
대신 )만 사용합니다.foo()
라벨에 나와 있듯이 이것은인용하다, 복사본이 아니기 때문에 함수에서 배열을 수정하면 변경 사항이 기본 프로그램에 표시됩니다.
또 다른 더 나쁜 옵션은 배열을 문자열에 연결하여 변수로 전달하는 것입니다.
function concated {
echo "the whole array is \"$1\""
}
concated "${blah[*]}"
그러나 이는 배열에서 문자열로의 패키징을 위한 복잡한 시스템을 마련하지 않는 한 기본적으로 배열을 사용하는 목적을 무산시킵니다.
위 호출은 물론 다음과 같이 인쇄됩니다.
second item of 'blah' is b
second arg to this function is "other arg"
the whole array is "a b c"