[:=: 단항 연산자가 필요합니다.

[:=: 단항 연산자가 필요합니다.

Android 에뮬레이터 내부의 서비스가 apk를 설치할 준비가 되었는지 또는 이 명령을 사용하지 않는지 테스트하는 스크립트를 작성해야 합니다.

adb -s emulator-5554 shell pm list package | grep package:com.android.

명령이 첫 번째 줄에 이러한 하위 문자열을 출력하지 않으면 avd가 apk 설치 준비가 되지 않은 것입니다.

시스템이 실행되고 있나요?

서비스를 찾을 수 없습니다

온라인

이건 내 스크립트야

if [ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"Is the system running?"* ] ||
   [ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"Can't find service"* ] ||
   [ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"online"* ] ; then
  echo "could not find package service"
else
  echo "found package service"    
fi  

그런데 이 오류가 발생해요

./script.sh: line 4: [: =: unary operator expected
./script.sh: line 5: [: =: unary operator expected
./script.sh: line 6: [: =: unary operator expected

답변1

테스트에서 명령 대체로 인해 $(adb -s ...)여러 단어로 구성된 문자열이 생성되면 쉘은 이를 구문 오류로 처리합니다. 확장명을 인용해야 합니다.

[ "$(adb -s ...)" = *"Is the system running?"* ]

인용되지 않은 명령 대체의 결과는 인용되지 않은 변수 확장과 마찬가지로 분할 및 파일 이름 글로빙을 겪게 됩니다. 견적 확장을 통해 이러한 상황을 피할 수 있습니다. 귀하의 경우에는 문제를 일으키는 부서입니다.

명령 대체가 확장되면 테스트는 다음과 같을 수 있습니다.

if [ word1 word2 word3 = *"some string"* ]

이는 분명히 구문 오류입니다.

관련 정보