나는 bash 스크립트를 작성 중이며 set -u빈 배열 확장에 문제가 있습니다. bash는 확장 중에 빈 배열을 설정되지 않은 변수로 취급하는 것으로 보입니다.
$ set -u
$ arr=()
$ echo "foo: '${arr[@]}'"
bash: arr[@]: unbound variable
( declare -a arr도 도움이되지 않습니다.)
이에 대한 일반적인 해결책은 ${arr[@]-}대신 사용 하여 ( "정의되지 않은") 빈 배열 대신 빈 문자열로 대체하는 것입니다. 그러나 이것은 좋은 해결책이 아닙니다. 지금은 하나의 빈 문자열이있는 배열과 빈 배열을 구별 할 수 없기 때문입니다. (@ -expansion는 확장, bash는 특별한 "${arr[@]}"에 "${arr[0]}" "${arr[1]}" …그 명령 라인을 구축하기위한 완벽한 도구 만드는.)
$ countArgs() { echo $#; }
$ countArgs a b c
3
$ countArgs
0
$ countArgs ""
1
$ brr=("")
$ countArgs "${brr[@]}"
1
$ countArgs "${arr[@]-}"
1
$ countArgs "${arr[@]}"
bash: arr[@]: unbound variable
$ set +u
$ countArgs "${arr[@]}"
0
그렇다면 배열의 길이를 확인하거나 if(아래 코드 샘플 참조) -u짧은 부분에 대한 설정을 끄는 것 외에 그 문제를 해결할 수있는 방법이 있습니까?
if [ "${#arr[@]}" = 0 ]; then
veryLongCommandLine
else
veryLongCommandLine "${arr[@]}"
fi
업데이트 :bugs ikegami의 설명으로 인해 태그가 제거 되었습니다.

"${arr[@]}". 내가 뭔가를 놓치고 있습니까? 내가 볼 수있는 것에서 적어도5.x.