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
나는 심지어 더 읽기 쉽다.
답변
그것들은 XSI 확장이기 때문에 구현되거나 구현되지 않을 수 있습니다. 참조 : http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html