"콜론"과 "달러 물음표"를 결합하여 sh
스크립트에 인수가 있는지 확인하고 이를 관심 변수에 직접 할당할 수 있습니다.
cmd=${1:? "Usage: $0 {build|upload|log}"}
작동 방식과 구현 세부 정보를 어디서 찾을 수 있는지 단계별로 설명할 수 있나요? 예를 들어, stderr
.
help() {
echo $"Usage: $0 {build|upload|log}"
exit 1
}
cmd=${1:? help}
왜 이것이 불가능합니까?
답변1
이 내용은 다음과 같습니다변수 확장:
${parameter:?word}
If parameter is null or unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.
따라서 argument
스크립트가 실행되지 않으면 변수가 표준 출력에 기록 cmd
되고 help
셸로 반환됩니다.
그러나 읽기만 하고 실행하지는 않습니다. 백틱으로 묶으면 실행되고 Usage 함수가 실행됩니다.
help() {
echo "Usage: $0 {build|upload|log}"
}
cmd=${1:? `help`}
불행하게도 변수 확장이 그렇게 하도록 설계되었기 때문에 이것은 여전히 stderr에 나타날 것입니다.
다음을 수행할 수도 있습니다.
cmd=${1:-help}
$cmd