POSIX 테스트 및 -a

POSIX 테스트 및 -a

스크립트를 확인했습니다중단주의다음과 같은 경고가 표시됩니다.

possible bashism in check_ssl_cert line 821 (test -a/-o):
if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then

존재하다POSIX 사양 섹션 4.62.4내가 찾은

Primary -a Primary는 기본 및 기본 결과에 대해 이진 작업을 수행합니다. -a 연산자는 -o 연산자보다 우선합니다.

-a왜 휴대용이 아닌 것으로 간주됩니까 -o?

답변1

이식성이 없다는 것은 아니지만 [4개 이상의 매개변수를 전달할 때 구현이 안정적이지 않습니다.

Bash에서도:

$ ALTNAMES='='  bash -c '[ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ]'
bash: line 0: [: too many arguments

관련 부분에는 다음과 같이 명시되어 있습니다.

>4개 매개변수:

결과는 명확하지 않았습니다.

[OB XSI] [옵션 시작] XSI 호환 시스템에서 기본 및 연산자의 조합은 이전에 설명한 우선 순위 및 연관성 규칙을 사용하여 평가되어야 합니다. 또한 문자열 비교 이진 전공 "=" 및 "!="는 단항 전공보다 우선 순위가 높아야 합니다. [옵션 끝]

-a-o금지되어야합니다 . 올바른 방법은 다음을 사용하는 것입니다 &&.|| 껍데기연산자로 변경:

if [ -n "$foo" ] && [ -n "$bar" ]; then

심지어 더 명확하다고 생각합니다.

답변2

XSI 확장이기 때문에 구현될 수도 있고 구현되지 않을 수도 있습니다. 바라보다:http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html

관련 정보