2012-05-22 4 views
2

실행되는 쉘 스크립트가 있습니다. 스크립트에서 나는이 : 여기쉘 스크립팅에 이중 대괄호가있는 문제

if [[ $variable == *something* ]]; then 
    do something 
fi 

내 문제는 스크립트를 실행하면 "[[찾을 수 없음"을 반환한다는 것입니다.

다른 답변을 읽는 것으로부터 모든 셸이 이중 대괄호를 인식하지 못하는 것 같지만 해결 방법이 확실하지 않습니다. 그 코드와 동일한 것은 무엇입니까?

+0

당신이 떠들썩한 파티에서이 실행중인 작동합니까? 상단에 #!/bin/bash를 추가하십시오. – frankc

+0

상단에 #!/bin/bash를 추가하면 영원히 실행됩니다. 나는 스크립트 실행에 대한 제어권이 없다. 나는 단순히 웹 페이지의 어딘가에 넣을 뿐이다. – user220755

+1

[http://stackoverflow.com/questions/669452/is-preferable-over-in-bash-scripts](http://stackoverflow.com/questions/669452/is-preferable-over-in)을 참조하십시오. -bash-scripts)와 [http://mywiki.wooledge.org/BashFAQ/031](http://mywiki.wooledge.org/BashFAQ/031) 이것은 당신을 도울 것입니다 – dwalter

답변

3

셸이 POSIX sh 인 것처럼 들리 겠지만, [[ 기본 제공이 없습니다. 가능한 해결책은 sh에 대해 작동하는 표현으로 변환하거나 shebang 행을 #!/bin/bash으로 변경하는 것입니다. 일반적으로시 뱅을 바꾸는 것이 가장 좋은 방법입니다.

우분투 사용자는 대시를 사용하는 경우 POSIX sh이있을 수 있습니다.

+0

#!/bin/bash를 추가했을 때 정상에, 그것은 영원히 실행갑니다. 나는 스크립트 실행에 대한 제어권이 없다. 나는 단순히 웹 페이지의 어딘가에 넣을 뿐이다. – user220755

+2

@ user220755 : 그런 다음 스크립트에 무한 루프가 있습니다. 세방 (shebang) 라인은 그 자체만으로는 무한히 달릴 수 없습니다. 스크립트로 새 질문을 열어 문제가있는 곳을 찾아야합니다. – Daenyth

+1

시 뱅을 바꾸는 것은 일반적으로 * 최악의 해결책입니다. 스크립트를 이식성있게 만드는 것이 훨씬 더 유용합니다. –

1

하나의 브래킷 만 알고 있습니다. 각 브래킷 하나만 사용해 보았습니까? 그렇지 않으면 test을 대신 사용할 수 있습니다.

+0

당신은 test [$ variable == * something *]를 의미합니다; ? 나는 "테스트"가하는 일을 확신하지 못한다. – user220755

+0

'test'는 []에 해당하는 스크립트입니다. 자세한 내용과 예제는 http://en.wikipedia.org/wiki/Test_%28Unix%29를 참조하십시오. – Herm

+0

글로브 스타일 비교는 하나의 대괄호 안에 작동하지 않습니다. 표현식은 일치하는 파일 이름 목록으로 확장됩니다. –

1

POSIX 표준 솔루션 :

if test echo "${variable}" | grep -q 'something' 
then 
    # do something 
fi 

항상 :

+1

+1에서 해결할 수 있지만, 나는 그것이 항상 작동 할 것이라고 확신 할 수 없습니다.특히, '*'는 globbed 될 가능성이 높습니다;) –

+0

-1; 'test'는 glob 매칭을 지원하지 않기 때문에 bash와 동일한 방식으로 작동하지 않습니다. –

+0

@CharlesDuffy :'echo "$ {variable}"| grep "glob"는 정규 표현식을 사용할 수 있기 때문에 더 잘 작동합니다. 위의 글로브 표현이 아니라 '* something *'을 해석했지만 ''의 자리 표시 자일뿐입니다. 사실 그것은 globs를 할 수 없지만 POSIX 표준이며, DASH 등의 출현으로 점점 더 중요 해지고 있습니다. – djhaskin987