2013-04-01 4 views
0

BASH 스크립트의 표현을 설명해 주시겠습니까?

${1:-} 

전에는 본 적이 없으므로 그 중 일부를 시도합니다.

echo ${1:-} 
echo ${1} 

나는 어떤 차이점을 볼 수 없습니다.

대단히 감사합니다!

+1

설명서를 읽으셨습니까? –

+0

영어 실력이 떨어지고 배쉬 매뉴얼에서 키워드를 찾을 수 없습니다. – Jinnan

답변

1

단지 작은 예는 비어 또는 설정하지 않으며이 : 변화로 설정되어 있지 않은 경우 경우 :- 변수의 값을 변경 here

varName="Aloha" 
echo "varName is not empty: the two constructs behave the same" 
echo ${varName-Hello World} 
echo ${varName:-Hello World} 
echo "" 
unset varName 
echo "varName is unset: they still behave the same way" 
echo ${varName-Hello World} 
echo ${varName:-Hello World} 
echo "" 
varName="" 
echo "varName is empty: this is where the two differs" 
echo ${varName-Hello World} 
echo ${varName:-Hello World} 
echo "" 

basicalli 각색.

+0

예를 들어 주셔서 감사합니다. 명확하게 설명하십시오. – Jinnan

2
man page에서

:

$ {매개 변수 : -Word}

사용시 기본 설정 값. 매개 변수가 설정되지 않았거나 null 인 경우 단어 확장은 으로 대체됩니다. 그렇지 않으면 매개 변수의 값이 대체됩니다.

+0

+1 문서에 링크하기 위해, 솔직히 나는 더 체계적이고 탐색하기 쉬운 [Bash Reference Manual] (http://www.gnu.org/software/bash/manual/bashref.html)을 선호합니다. 이 기능은 특히 [쉘 매개 변수 확장] (http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)에 있습니다. –

+0

대단히 감사합니다. !!! – Jinnan

+0

감사합니다. – Jinnan

0

많은 용도가 없습니다. ${1-}set -u이 활성화되었을 때 관련이 있습니다.이 경우 재설정되지 않을 것으로 예상되는 값을 가진 매개 변수가 참조 해제되는 경우 오류가 발생하지 않도록 ${1+"$1"}과 유사한 또 다른 해킹입니다.

$ (f() { printf '<%s> <%s>\n' $# ${1-}; }; set -u; f) 
<0> <> 
$ (f() { printf '<%s> <%s>\n' $# $1; }; set -u; f) 
-bash: $1: unbound variable 

콜론을 추가하면 매개 변수가 설정되지 않았거나 null 인 경우 대체 문자가 확장됩니다. 두 경우 모두 확장이 인용되지 않으면 결과는 항상 IFS 값과 관계없이 args가되지 않습니다. 사람들이 Bash의 맨 페이지에 불행한 불운 한 방식으로 인해 -:- PE 연산자의 차이를 알지 못하는 것은 흔한 일입니다.

늘 그렇듯이 스크립트에서 set -u을 절대 사용하지 않는 것이 좋습니다. 디버깅에 유용하다고 생각되는 사용자는 임시로만 사용하십시오.

+0

고맙습니다. 그러나 그것은 나를 위해 조금 difficut. – Jinnan

관련 문제