매개변수 대체

매개변수 대체

Linux에서 다음 두 매개변수 대체 옵션의 차이점을 알고 싶습니다.

echo ${MESG:? "HI"}
echo ${MESG:- "HI"}

그들은 모두 같은 일을 하고 있는 것 같습니다.

답변1

bash매뉴얼 에서 (POSIX 표준비슷한 문구가 있음):

${parameter:-word}:기본값 사용. 설정되지 않거나 null인 경우 parameter대체할 확장자입니다. 그렇지 않으면 word값이 대체됩니다.parameter

${parameter:?word}:비어 있거나 설정되지 않은 경우 오류 표시. null이거나 설정되지 않은 경우 parameter확장 word(또는 존재하지 않는 경우 메시지 word)이 표준 오류에 기록되고 쉘(대화형이 아닌 경우)이 종료됩니다. 그렇지 않으면 parameter 값이 대체됩니다.

변수가 비어 있지 않은 문자열 인 경우 MESG동일한 작업을 수행합니다(변수의 값으로 확장 MESG). 비어 있거나 전혀 설정되지 않은 경우 ${MESG:-HI}문자열로 대체되고 표준 오류를 표시하며 HI현재 쉘 세션을 종료합니다(대화식 세션이 아닌 경우).${MESG:?HI}HI

답변2

MESG가 설정되지 않은 경우

echo ${MESG:?}

인쇄됩니다

MESG: parameter null or not set


echo ${MESG:-}

인쇄됩니다

<empty string>

이것? - 따라서 null 또는 설정되지 않은 변수를 처리하는 방법을 결정합니다.

관련 정보