`-a` 또는`-o` 연산자를`[`와 함께 사용하지 마십시오 몇 가지

스테판 샤 젤라 스는 다음과 같이 썼다.

같은 몇 가지 규칙

  • 항상 변수를 인용
  • -aor -o연산자를 사용하지 마십시오 (여러 [명령 &&||셸 연산자 사용)

확인 [POSIX 쉘과 신뢰성.

왜 ” -a또는 -o연산자를 사용하지 않습니까?”

“여러 [명령 &&||쉘 연산자 사용”을 어떻게 할 수 있습니까?



답변

왜 ” -a또는 -o연산자를 사용하지 않습니까?”

모호 할 수 있기 때문에 POSIX 호환이 아닙니다 .

-a 및 -o 2 진 1 차 및 ‘(‘및 ‘)’연산자를 지정하는 XSI 확장은 더 이상 사용되지 않는 것으로 표시되었습니다. (이를 사용하는 많은 표현식은 평가할 특정 표현식에 따라 문법에 의해 모호하게 정의됩니다.) 이러한 표현식을 사용하는 스크립트는 아래 주어진 형식으로 변환되어야합니다. 많은 구현이 이러한 노후화 된 형식을 계속 지원하지만, 스크립트는 이들 및 다른 기본 및 연산자와 혼동 될 수있는 사용자 제공 입력을 처리 할 때 매우주의해야합니다. 애플리케이션 개발자가 스크립트에 입력을 생성하는 모든 경우를 알고 있지 않으면 다음과 같은 호출이 있습니다.

test "$1" -a "$2"

다음과 같이 작성해야합니다.

test "$1" && test "$2"

“여러 [명령 &&||쉘 연산자 사용”을 어떻게 할 수 있습니까?

상기 연산자를 사용하여 다수의 테스트를 수행하고 연결함으로써; 예를 들면 다음과 같습니다.

[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]

동등한 것으로 다시 쓸 수 있습니다 :

[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])

또는 더 나은 :

[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }