2014-12-15 4 views
3

을 이해 :은 다음 bash는 구문을 의미합니까 무엇 bash는 스크립트 구문

function use_library { 
    local name=$1 
    local enabled=1 
    [[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]] && enabled=0 
    return $enabled 
} 

내가 특히 라인 [[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]]을 이해하지 않습니다. 어떤 정규식이나 문자열 비교입니까?

+0

'활성화 된'로컬은 여기서는 전혀 필요하지 않습니다. 단순히 마지막 행을'[[, $ {LIBS_FROM_GIT}, = ~, $ {name},]]'으로하면 반환 값에 동일한 효과가 있습니다. –

답변

4

변수를 비교하고 그 중 일부가 정의되지 않았거나 비어있는 경우 이상한 동작을 방지하는 트릭입니다.

, 또는 기타를 사용할 수 있습니다. 가장 중요한 점은 ${LIBS_FROM_GIT}${name}을 비교하고 그 중 하나가 비어있는 경우를 방지하려는 것입니다.

의견에서 Etan Reisner가 말한 것처럼 [[에는 변수 확장 문제가 없습니다.

이 작동하지 않습니다 : 그래서이 트릭은 일반적으로 하나의 [과 비교 할 때 사용되는

$ [ $d == $f ] && echo "yes" 
bash: [: a: unary operator expected 

을하지만 우리는 두 변수 주위에 문자열을 추가 할 경우 수행합니다

$ [ ,$d, == ,$f, ] && echo "yes" 
$ 

마지막으로 직접 사용할 수 있습니다.

+1

'[['는 변수 확장 문제가 없습니다. 아,하지만 빈 패턴이 항상 일치합니다. –

+0

좋은 지적, @EtanReisner. 나는 이것을 내 대답에 포함시켰다, 고마워. – fedorqui

+1

'&& ... '비트가 필요 없습니다. 어쨌든 얻을 수있는 반환 값입니다. –