이 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
더 이상 정의되지 않습니다.