아래의 "if-then-else 예"에서 "${2:-}"는 어떻게 작동합니까? 왠지 ${2:-}가 두 번째 인수를 의미한다고 생각하지 않을 수 없는데, 숫자 2 뒤의 콜론(:)과 대시(-)가 무엇을 의미하는지 궁금합니다.
if [ "${2:-}" = "Y" ]; then
prompt="Y/n"
default=Y
elif [ "${2:-}" = "N" ]; then
prompt="y/N"
default=N
else
prompt="y/n"
default=
fi
read -p "$1 [$prompt] " REPLY </dev/tty
답변1
구문은 or 또는 설정되지 않은 경우 하이픈 뒤의 텍스트(이 경우 ) ${VAR:-default}
값으로 평가됩니다 . 구문은 유사한 함수의 약어와 유사합니다.VAR
default
${VAR- default}
오직변수가 설정되지 않은 경우. $2
위치 매개변수이므로 문은 설정되지 않은 경우 기본값으로 null을 사용하여 두 번째 매개변수의 값을 테스트합니다.
일반 기본값과 동일한 효과가 있는데 왜 빈 기본값을 사용합니까 $2
? set -u
( 와 동일 ) 에서 set -o nounset
설정되지 않은 변수를 바꾸면 오류가 발생하므로 인수가 2개 미만이면 $2
오류가 발생합니다. 하지만 ${2:-}
매개변수가 설정되지 않거나 비어 있으면 빈 문자열을 명시적으로 대체하므로 오류가 발생하지 않습니다.