POSIX 테스트 및 -a checkbashisms 로

checkbashisms 로 내 스크립트를 확인 하고 다음 경고가 표시되었습니다.

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

에서 는 POSIX 사양의 섹션 4.62.4 I 찾기

primary -a primary 바이너리와 primary 및 primary의 결과를 수행합니다. -a 연산자는 -o 연산자보다 우선합니다.

-a-o비 휴대용 고려?



답변

이식성이 좋지는 않지만 [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

나는 심지어 더 읽기 쉽다.