누락된 변수와 "-u" 플래그를 확장해도 Bash가 실패하지 않는 이유는 무엇입니까?

누락된 변수와 "-u" 플래그를 확장해도 Bash가 실패하지 않는 이유는 무엇입니까?

이 Bash 스크립트는 실패할 것으로 예상했지만 성공적으로 실행되었습니다.

set -u
exec {FOO}>/tmp/foo.lock
echo "FOO=$FOO"

OnlineGDB에서도:https://onlinegdb.com/3gv34jmGr

Bash(5.0.3 및 5.1.16)가 FOO파일 설명자로 확장을 시도하고 정의되지 않고 -u설정되어 있으므로 중지하기를 원합니다. 그 노선을 운영할 뿐만 아니라,놓다 FOO임의의 숫자로 변환하고 스크립트를 완성하세요. 표준 출력은

FOO=10

여기서 무슨 일이 일어나고 있는 걸까요? 문서화된 Bash 기능인가요? 이에 대한 자세한 정보는 어디서 찾을 수 있나요? 특히 숫자 10이 있는 이유는 무엇입니까?

답변1

~에서수동:

각 리디렉션 앞에는 파일 설명자 번호가 올 수 있지만 다음 형식의 단어가 앞에 올 수도 있습니다 {varname}. 이 경우 >&-및 를 제외한 모든 리디렉션 연산자 에 대해 <&-쉘은 10보다 큰 파일 설명자를 할당하고 이를 에 할당합니다 {varname}.

(물론 "10보다 크거나 같아야 합니다.")

당신은 exec {FOO}>/tmp/foo.lock직업을 포함합니다. FOO더 이상 정의되지 않습니다.

관련 정보