내가 여기서 무엇을 놓치고 있는 걸까요?
간단한 배열을 만들었습니다.
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[@]}"