![Bash: `-su: $*: 바인딩되지 않은 변수` 및 `set -u`](https://linux55.com/image/2847/Bash%3A%20%60-su%3A%20%24*%3A%20%EB%B0%94%EC%9D%B8%EB%94%A9%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EB%B3%80%EC%88%98%60%20%EB%B0%8F%20%60set%20-u%60.png)
이것은 GNU bash 버전 4.0을 실행하는 FreeBSD 7.x 시스템입니다.
Bash에서 이 set -u
옵션은 다음과 같이 설정되지 않은 변수를 발견할 때 쉘이 오류를 인쇄하도록 강제합니다.
$ set -u
$ echo $THISISUNSET
-su: THISISUNSET: unbound variable
$ echo $?
1
그러나 $*에서도 동일한 오류가 발생합니다.
$ echo $*
-su: $*: unbound variable
$ echo $?
1
$ echo $@
-su: $@: unbound variable
배쉬 매뉴얼4.3.1 내장 컬렉션특히 set -u
$* 및 $@는 무시됩니다.
-u 매개변수 확장을 수행할 때 설정되지 않은 변수와 특수 매개변수 "@" 또는 "*" 이외의 매개변수를 오류로 처리합니다. 오류 메시지가 표준 오류에 기록되고 비대화형 쉘이 종료됩니다.
이 문제를 어떻게 해결할 수 있나요?
답변1
이는 이전 버전의 bash, 특히 4.0β2 패치 수준 d에서 4.0 패치 수준 m까지의 버그입니다. ~에서변경 로그4.0에서 4.1α로:
명사
set -u
최신 Posix를 준수하도록 동작이 수정되었습니다. 설명: $@ 및 $* 이외의 설정되지 않은 변수를 확장할 때마다 쉘이 종료됩니다.
이 동작은 이전(그리고 현재의) 동작이 문제가 있는 것으로 간주되었기 때문에 4.0β2에서 도입되었습니다.
d. -u 옵션이 활성화되고 위치 인수가 없을 때 $@ 및 $* 확장이 셸을 종료하지 못하는 버그를 수정했습니다.