저는 쉘 스크립팅을 처음 접했고 다음 표현을 접했습니다.
${var:-val}
그리고${var-val}
${var:+val}
그리고${var+val}
${var:=val}
그리고${var=val}
그렇다면 그들은 어떻게 평가되고 차이점은 무엇입니까?
답변1
다음은 다양한 형태의 매개변수 확장 및 대안입니다.
${var:-val}
val
var
설정되지 않았거나 null 인 경우 "기본값"${var}
으로 대체됩니다 .val
${var:=val}
먼저 if 가 설정되지 않거나 nullval
로 할당된 다음 (모든 경우에) ; 로 대체됩니다.var
var
${var}
${var:+val}
로 대체됩니다아무것도 없다var
설정되지 않았거나 null인 경우 ,val
그렇지 않은 경우.
생략하면 :
이러한 모든 정의에서 "또는 null" 부분이 제거됩니다.
다 거기 있어bash(1)
맨페이지, 그리고POSIX.
몇 가지 예가 도움이 될 수 있습니다.
unset a
echo "${a:-default}"
default
와 같은 을 생성합니다 echo "${a-default}"
.
a=
echo "${a:-default}"
다시 생성 default
하지만 echo "${a-default}"
빈 줄을 출력합니다.
a=test
echo "${a:-default}"
test
와 같은 을 생성합니다 echo "${a-default}"
.
unset a
echo "${a:=default}"
가 생산 default
되었습니다 (에서 확인 ).a
default
echo "${a}"
이 +
형식은 이상해 보일 수 있지만 여러 단계로 변수를 구성할 때 유용합니다.
PATH="${PATH}${PATH:+:}/blah/bin"
비어 있지 않은 경우에만 앞에 추가됩니다 :
. 이렇게 하면 로 시작하는 경로가 방지됩니다./blah/bin
PATH
: