2014-01-27 4 views
1

다음은 왜 작동하지 않습니까? 내가하려는 일은 adb 명령을 실행하고 응답에 특정 문자열이 포함되어 있다면 그것에 대해 무언가를하는 것입니다.Bash 스크립트 - 인수가 너무 많습니다.

나는 오류 [; too many arguments

VARIABLE=$(adb devices); 
if [ "$VARIABLE" == *list of attached* ]; then 
    echo "adb command worked"; 
fi 

어떤 아이디어가 계속? [[ and ]] 내부의 인수를 인용

+0

다른 주에 : 명령'ADB devices'는 장치의 목록, attached' 아닌'목록을 attached' '단어를 반환합니다. 따라서'if' 문은 항상 false를 반환 할 수 있습니다. – anishsane

답변

5

시도 :

VARIABLE="$(adb devices)" 
if [[ "$VARIABLE" == *"list of attached"* ]]; then 
    echo "adb command worked"; 
fi 

==가 양쪽에 하나의 인자를 필요로한다. [ "$VARIABLE" == *list of attached* ]을 사용할 때 *list== 다음의 첫 번째 인수이며 나머지는 추가 인수로 간주됩니다.

+1

'adb devices'도 좋은 종료 코드를 반환합니다.이 경우'if adb devices>/dev/null 2> & 1; 그러면 .. '이 올바른 방법 (질문자의 방식은 아님)이 될 것입니다. –

1

당신은 양자 택일 정규식 매칭을 할 BASH의 이항 연산자 =~를 사용하여 시도 할 수 :

VARIABLE="$(adb devices)" 
if [[ $VARIABLE =~ list\ of\ attached ]]; then 
    echo "adb command worked" 
fi 
+0

전문 용어 힌트 : 와일드 카드 문자는 OP에서 사용하는 _globbing 패턴 _과 연결됩니다. '= ~'연산자는 정규 표현식 일치를위한 연산자입니다. – mklement0

+0

@ mklement0 맞습니다. 혼란을 피하기 위해 업데이트 된 게시물. –

관련 문제