Shell
POSIX 測試和 -a
我用checkbashisms檢查了我的一個腳本,並收到以下警告:
possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then
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 $$ $$ Option Start $$在符合 XSI 的系統上,應使用前面描述的優先級和關聯性規則來評估初級和運算符的組合。此外,字元串比較二元基元 ‘=’ 和 “!=” 應具有比任何一元基元更高的優先級。$$ Option End $$
-a
並且-o
應該被禁止。正確的方法是使用&&
and||
shell運算符:if [ -n "$foo" ] && [ -n "$bar" ]; then
我什至覺得它更清晰。