스테판 샤 젤라 스는 다음과 같이 썼다.
같은 몇 가지 규칙
- 항상 변수를 인용
-a
or-o
연산자를 사용하지 마십시오 (여러[
명령&&
및||
셸 연산자 사용)확인
[
POSIX 쉘과 신뢰성.
왜 " -a
또는 -o
연산자를 사용하지 않습니까?"
"여러 [
명령 &&
과 ||
쉘 연산자 사용"을 어떻게 할 수 있습니까?
스테판 샤 젤라 스는 다음과 같이 썼다.
같은 몇 가지 규칙
- 항상 변수를 인용
-a
or-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 ]; }
()
및 {}
교체 등. (2) 첫 번째; (())
는 산술 확장에 사용됩니다. 여기서 테스트 체인의 종료 상태를 테스트하려고하므로 테스트를 서브 쉘 ()
또는 현재 쉘로 그룹화하십시오 {}
.
(
및 )
사용중인 경우 운영자입니다 -a
나 -o
. 후자는 더 이상 사용되지 않으므로 전자는 더 이상 필요하지 않습니다.
(
및)
그룹 명령하는 사업자? 더 이상 사용되지 않으면 대체품은 무엇입니까? (2) 또는test "$1" -a "$2"
로 대체 해야합니까 ? 우리는 필요하지 않습니까?test "$1" && test "$2"
((test "$1" && test "$2"))
((..))