함수의 배열 표시 - 작동하지 않습니다

함수의 배열 표시 - 작동하지 않습니다

내가 여기서 무엇을 놓치고 있는 걸까요?

간단한 배열을 만들었습니다.

declare -a appArray=(
    "item1 -a -b"
    "item2 -c -d"
    )

이에 응답하면 모든 것을 볼 수 있습니다.

echo ${appArray[@]}

> item1 -a -b item2 -c -d

그런 다음 다음과 같은 함수를 만듭니다.

fc_DEBUG () { 
    if [ $1 -eq 1 ] ; then 
        echo $2; 
    fi; 
};

이는 bash 스크립트 내부에 있도록 설계되었으며 DEBUG 변수를 설정하면 텍스트가 에코됩니다. 따라서 수동으로 항목을 추가/제거하지 않고도 스크립트 전체에서 사용할 수 있습니다.

기본 데이터와 함께 작동합니다.

fc_DEBUG $DEBUG "This is DEBUG text"

그러나 배열을 사용하여 호출하면 배열의 일부만 가져옵니다.

fc_DEBUG $DEBUG "${appArray[@]}"

> item1 -a -b

답변1

${appArray[@]}실행하기 전에 확장되었습니다 fc_DEBUG. 따라서 함수가 보는 두 번째 매개변수는 배열의 첫 번째 매개변수입니다. 구체적으로 이 세 가지 매개변수 fc_DEBUG

$DEBUG "item1 -a -b" "item2 -c -d"

($DEBUG를 $DEBUG의 실제 값에 적용된 분할+glob 연산자에 의해 생성된 단어로 바꾸십시오(인용하는 것을 잊어버렸기 때문입니다). 기술적인 측면에서 배열은 참조가 아닌 값으로 전달됩니다.

fc_DEBUG () { 
    if [ "$1" -eq 1 ] ; then 
        shift
        echo "$@"
    fi
}

이제 매개변수 목록의 첫 번째 매개변수를 제거 shift하고 나머지 모든 매개변수를 인쇄합니다.

인용된 배열로 호출하세요.

fc_DEBUG "$DEBUG" "${appArray[@]}"

관련 정보