일부 내용을 살펴보겠습니다.
set -o nounset
var="${var}something"
echo $var
오류로 인해 실패합니다.
unset.sh: line 3: var: unbound variable
+=
하지만 연산자를 사용하면
set -o nounset
var+=something
echo $var
오류 없이 실행되고 다음과 같이 인쇄됩니다.
something
나에게는 이런 행동이 조금 예상치 못한 것 같다. 나는 할 수있다? var+=something
와 의 행동은 var=${var}something
비슷해야 할까요, 아니면 다를 수 있을까요?
답변1
여기서 쉘은 bash
POSIX 옵션의 범위를 nounset
다음으로 제한합니다.오직변수의 명시적인 확장.
즉, nounset
셸 옵션은 설정되지 않은 변수를 명시적으로 확장하려는 경우에만 작동합니다. 이런 일이 일어나고 있지만 var="${var}something"
지금은 그렇지 않습니다 var+=something
.
이 명령문에는 var+=something
에 대한 언급이 없으므로 $var
설정되지 않은 변수에 대한 명시적인 확장이 없습니다.
제 생각에는 다음 bash
두 가지 이유로 괜찮습니다.
nounset
명시적인 변수 확장을 언급 하고 싶습니다 .- 이
+=
연산자는 POSIX 표준의 확장이므로 POSIX 쉘 옵션이 영향을 미칠 필요가 없습니다.
var
값을 추가하기 전에 정의되었는지 확인해야 하는 경우 다음과 같은 것을 사용하세요.
if [[ -v var ]]; then
var+=something
else
echo 'Unset variable var' >&2
exit 1
fi
(즉, 내장 테스트로 테스트 -v
) 또는 nounset
설정되지 않은 변수의 실제 사용법을 캡처하는 데 의존하는 경우 var=${var}something
구문을 사용하세요.