이 코드를 발견했습니다여기:
#!/bin/bash
# ...
if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
echo "Usage..."
exit
fi
-h
인수가 전달될 때(예 : , --help
, , ) -help
사용 정보를 인쇄하는 것이 무엇인지 알고 있습니다 .-------help
하지만 왜 "${1-}"
뿐만 아니라 "${1}"
? 하이픈은 무엇을 합니까?
처음에는 이것이 위치 1부터 시작하는 모든 주장을 의미할 수 있다고 생각했습니다. 그렇게 해봤는데 아니, 그렇지 않네요.
그러다가 오타일지도 모른다고 생각했고 작성자는 "${1-9}"
모든 숫자 위치를 허용하려고 했습니다. 다시 말하지만 작동하지 않으며 유효한 코드도 아닙니다.
답변1
매개변수 확장의 하이픈을 사용하면 기본값을 지정할 수 있습니다.. 따라서 ${1-}
"설정된 경우 첫 번째 인수의 값, 그렇지 않으면 빈 문자열"을 의미합니다.
설정되지 않은 변수는 어쨌든 빈 문자열로 확장되므로 이는 특히 유용하지 않은 것 같습니다. 그러나 활성화하고 인수가 제공되지 않으면 ${1}
대신 오류가 발생합니다. 따라서 일부 쉘 프로그래머는 합법적으로 설정되지 않은 변수를 참조할 때 항상 이 형식을 사용합니다.set -u
${1-}
이 항목을 찾은 웹사이트의 맥락에서 이는 "thing" 번호 5와 일치합니다.
.you 사용을 선호합니다
set -o nounset
.가능한이렇게 하지 않는 데에는 충분한 이유가 있지만, 항상 설정해 두는 것이 가장 좋다고 생각합니다.
- 이로 인해 설정되지 않은 변수에 액세스하면 스크립트가 실패하게 됩니다. 변수 이름의 철자 오류로 인해 의도치 않은 끔찍한 결과가 발생하지 않도록 하세요.
- 설정되었거나 설정되지 않은 변수에 액세스하려면
"${VARNAME-}"
대신 사용"$VARNAME"
하면 됩니다.