programing

bash에서 :-( 콜론 대시) 사용

randomtip 2021. 1. 15. 08:07
반응형

bash에서 :-( 콜론 대시) 사용


Bash에서이 스타일의 의미는 무엇입니까?

${PUBLIC_INTERFACE:-eth0}

의 목적은 :-무엇입니까?


경우 $PUBLIC_INTERFACE존재하고 null이 아닌, 그렇지 않으면 그 값을 반환 반환 "eth0".

실제로 bash man 페이지 에 몇 가지 문서가 있습니다 .

$ {parameter : -word} 기본값을 사용합니다. 매개 변수가 설정되지 않거나 널인 경우 단어 확장이 대체됩니다. 그렇지 않으면 매개 변수 값이 대체됩니다.

$ {parameter : = word} 기본값을 할당합니다. 매개 변수가 설정되지 않거나 널이면 단어 확장이 매개 변수에 지정됩니다. 그런 다음 매개 변수 값이 대체됩니다. 이러한 방식으로 위치 매개 변수 및 특수 매개 변수를 할당 할 수 없습니다.

$ {parameter :? word} Null이거나 설정되지 않은 경우 오류를 표시합니다. 매개 변수가 널이거나 설정되지 않은 경우, 단어 확장 (또는 단어가없는 경우 해당 효과에 대한 메시지)이 표준 오류에 기록되고 대화식이 아닌 경우 쉘이 종료됩니다. 그렇지 않으면 매개 변수 값이 대체됩니다.

$ {parameter : + word} 대체 값을 사용합니다. 매개 변수가 null이거나 설정되지 않은 경우 아무 것도 대체되지 않고 그렇지 않으면 단어 확장이 대체됩니다.


:-쉘 매개 변수 확장에 사용 됩니다. 가 null이거나 설정되지 않은 경우 값으로 확장되고 그렇지 않으면 값으로 확장됩니다 .${parameter:-word} parameterwordparameter

예:

$ 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않으면 정의 된 경우 또는 else vi.
    • 인수로 제공되는 경우 파일에서 읽어야하고 그렇지 않으면 표준 입력에서 읽어야하는 스크립트의 루프는 다음과 같을 수 있습니다.

      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 -uset -o nounset

참조 URL : https://stackoverflow.com/questions/10390406/usage-of-colon-dash-in-bash

반응형