동일한 테스트에서 [[ ]] 테스트가 실패하고 [ ] 성공하는 경우는 언제입니까?

동일한 테스트에서 [[ ]] 테스트가 실패하고 [ ] 성공하는 경우는 언제입니까?

다음 줄이 포함된 스크립트를 발견했습니다.

java_version=$($JAVA_HOME/bin/java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d '_' -f 1,3)

다음은 테스트입니다.

if [[ -n "$java_version" ]]; then
    ...

명령줄에서 호출하면 테스트가 성공합니다. Java 애플리케이션에서 호출하면 실패합니다.

몇 가지 유용한 참고 사항:

  • 스크립트의 첫 번째 줄은 입니다 #!/usr/bin/env bash.
  • 테스트 성공은 명령줄에서 호출할 때 java_versionnull이 아님을 의미합니다. 추가로 확인하기 위해 echo테스트하기 전에 일부 외부 파일에 값을 쓰고 java_version거기에서 값을 찾습니다.
  • 이중 괄호를 단수로 변경했고 테스트는 명령줄과 Java 애플리케이션에서 스크립트를 성공적으로 호출했습니다.
  • 저는 GNU/Linux Ubuntu 18.04, bash 버전 4.4.20, Java 8(Oracle JDK)을 실행하고 있습니다.

이 동작 변화의 원인이 무엇인지에 대한 아이디어가 있습니까?

답변1

실행 중인 셸을 찾기 위해 스크립트에 다음 줄을 추가했습니다.

ps -p $$ > /path/to/some_file

/bin/sh실행 중인 쉘이 이중 대괄호 구문을 지원 하지 않는 것으로 나타났습니다 . 이중 괄호는 일부 셸(원천).

모든 크레딧은 내 게시물에 댓글을 단 사람들에게 돌아갑니다.

관련 정보