bash에서 :-( 콜론 대시) 사용
Bash에서이 스타일의 의미는 무엇입니까?
${PUBLIC_INTERFACE:-eth0}
의 목적은 :-
무엇입니까?
경우 $PUBLIC_INTERFACE
존재하고 null이 아닌, 그렇지 않으면 그 값을 반환 반환 "eth0"
.
실제로 bash man 페이지 에 몇 가지 문서가 있습니다 .
$ {parameter : -word} 기본값을 사용합니다. 매개 변수가 설정되지 않거나 널인 경우 단어 확장이 대체됩니다. 그렇지 않으면 매개 변수 값이 대체됩니다.
$ {parameter : = word} 기본값을 할당합니다. 매개 변수가 설정되지 않거나 널이면 단어 확장이 매개 변수에 지정됩니다. 그런 다음 매개 변수 값이 대체됩니다. 이러한 방식으로 위치 매개 변수 및 특수 매개 변수를 할당 할 수 없습니다.
$ {parameter :? word} Null이거나 설정되지 않은 경우 오류를 표시합니다. 매개 변수가 널이거나 설정되지 않은 경우, 단어 확장 (또는 단어가없는 경우 해당 효과에 대한 메시지)이 표준 오류에 기록되고 대화식이 아닌 경우 쉘이 종료됩니다. 그렇지 않으면 매개 변수 값이 대체됩니다.
$ {parameter : + word} 대체 값을 사용합니다. 매개 변수가 null이거나 설정되지 않은 경우 아무 것도 대체되지 않고 그렇지 않으면 단어 확장이 대체됩니다.
:-
쉘 매개 변수 확장에 사용 됩니다. 가 null이거나 설정되지 않은 경우 값으로 확장되고 그렇지 않으면 값으로 확장됩니다 .${parameter:-word}
parameter
word
parameter
예:
$ str=
$ echo "${str:-default}"
default
이것과 유사한 확장 사용하여 :=
, :+
그리고 :?
모두가 두 가지 종류로 제공 :로와 콜론없이. 차이는 확장이다 와 "널위한에서 대장 차기 또는 해제 반면" 없이 콜론, 그냥 "널 (null)"입니다.
관찰 :
$ str= # Null, but not unset
$ echo "${str-default}" # Expands to value of $str, the empty string
$ echo "${str:-default}" # Expands to "default"
default
이것은 어디에 유용합니까? 몇 가지 예 :
기본값
- 마지막 명령을 편집하기 위해 호출 된 편집기
fc
는 확장의 결과입니다${FCEDIT:-${EDITOR:-vi}}
:$FCEDIT
정의 된 경우, 그렇지$EDITOR
않으면 정의 된 경우 또는 elsevi
. 인수로 제공되는 경우 파일에서 읽어야하고 그렇지 않으면 표준 입력에서 읽어야하는 스크립트의 루프는 다음과 같을 수 있습니다.
while IFS= read -r line; do # do something done < "${1:-/dev/stdin}"
- 마지막 명령을 편집하기 위해 호출 된 편집기
사용할 때
set -u
set -u
예를 들어이 기사에서 홍보 한 것처럼 설정되지 않은 변수를 발견 할 때 스크립트가 죽도록하여 스크립트를 더 깔끔하게 만드는 편리한 방법입니다 ( 1 ). 특정 변수에으로 값이 있는지 확인하려면 합법적 일 수 있지만이 설정되지[[ $var ]]
않으면 스크립트가 이제 죽습니다var
.이 문제를 해결하는 방법은
[[ ${var:-} ]]
대신 사용 하는set -u
것이며 불평하지 않을 것입니다. (기본적으로 다시 기본값을 사용하지만이 경우 대체 값은 빈 문자열입니다.)
참고로 이러한 확장은 Bash에만 국한되지 않습니다. POSIX 셸 사양 에도 모두 포함되어 있습니다.
1 BashFAQ / 112를 참조하십시오. (또는 ) 사용의 장점과 단점은 무엇입니까 ?set -u
set -o nounset
참조 URL : https://stackoverflow.com/questions/10390406/usage-of-colon-dash-in-bash
'programing' 카테고리의 다른 글
모바일 Safari 자동 초점 텍스트 필드 (0) | 2021.01.15 |
---|---|
시간대가없는 PostgreSQL 변경 유형 타임 스탬프-> 시간대 포함 (0) | 2021.01.15 |
다른 파이썬 로그 핸들러에 대해 다른 수준을 설정하는 방법 (0) | 2021.01.15 |
이중 피벗 퀵 정렬과 퀵 정렬의 차이점은 무엇입니까? (0) | 2021.01.15 |
Python 3.x에서 2.x와 유사한 정렬 동작을 얻으려면 어떻게해야합니까? (0) | 2021.01.15 |