답변:
이것은 확실히 POSIX 구문 입니다. 역설 :
사용 ${parameter-word}
하는 경우 parameter
입니다
parameter
,word
.세션 예 :
$ echo "${parameter-word}"
word
$ parameter=
$ echo "${parameter-word}"
$ parameter=value
$ echo "${parameter-word}"
value
여기서 "널"은 단순히 빈 문자열을 의미합니다. 예를 들어 SQL과 달리 POSIX 셸에는 특수 null 값이 없습니다.
이 내용은의 "매개 변수 확장"섹션에 설명되어 man bash
있습니다.
zsh
콜론을 생략하는 것만 기록하는 것이 아니라 콜론이없는 변형을 명시 적으로 언급하는 유일한 쉘입니다.
변수 확장 ${parameter:-word}
은 $parameter
설정된 경우 null이 아닌 값 (빈 문자열 아님) 의 값을 사용하고 그렇지 않으면 문자열을 사용합니다 word
.
를 생략하면 :
값이 비어 있는지 테스트되지 않으며 값이 설정되어 있지 않은지 여부 만 있습니다.
즉 , 설정되어 있으면 ${PS1-}
값으로 확장 $PS1
되지만 비어 있거나 설정되어 있지 않으면 빈 문자열로 확장됩니다. 이 경우이는 정확히 같은 같은 ${PS1:-}
문자열이 이후로 -
또한 비어 있습니다.
의 차이 "${PS1-}"
와는 "$PS1"
@Rakesh 샤르마 노트로, 미묘 : 모두의 값으로 확장됩니다 $PS1
이 설정되지 않은 경우 빈 문자열로, 또는. set -u
활성화 되지 않은 경우 는 예외입니다 .이 경우 설정되지 않은 변수를 확장하면 오류가 발생합니다 . 이 설정에 의해 설정된 (빈) 기본값은 "${PS1-}"
이 를 방지하고 PS1
오류없이 빈 문자열로 설정 을 확장합니다 .
이것은 몇 가지 다른 유사한 확장과 마찬가지로 표준 구문입니다 ( 70 년대 후반 Bourne 쉘에서 시작 ).
"$PS1"
, PS1
비어 있으면 비어 있고 따옴표는 단어가 완전히 사라지지 않도록하기 때문입니다.
${parameter:-word}
값을 사용합니다 $parameter
. 다른 모든 경우 (의미 : set but NULL 또는 unset) 의미합니다 word
. 당신의 표현 :if its set or null
문법 :
${parameter:-word}
그리고 특별한 형태 :
${parameter-word}
는 IS POSIX 쉘 유효한 구 디폴트 값을 사용하는 수단 word
경우 parameter
해제 또는 널 (null)된다.
일반적으로 with word
가 비어 있으면 다음을 수행하십시오.
${parameter-}
과:
$parameter
또는:
${parameter}
동일합니다.
그러나의 영향으로 set -u
모든 설정되지 않은 변수로 인해 쉘이 종료됩니다. ${parameter-}
엄격한 규칙을 무시하는 데 사용됩니다. 두 경우 모두 작동하므로 더 올바른 방법입니다.