我检查了我的脚本制止主义我收到以下警告:
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
移植的?
答案1
并不是说它不可移植,而是没有[
实现在传递超过 4 个参数时它是可靠的。
即使在 bash 中:
$ ALTNAMES='=' bash -c '[ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ]'
bash: line 0: [: too many arguments
相关部分指出:
>4 个参数:
结果未明确。
[OB XSI] [Option Start] 在符合 XSI 的系统上,应使用前面描述的优先级和关联性规则来评估原色和运算符的组合。此外,字符串比较二进制主数“=”和“!=”的优先级应高于任何一元主数。 [选项结束]
-a
并且-o
应该被禁止。正确的方法是使用&&
and||
壳改为运算符:
if [ -n "$foo" ] && [ -n "$bar" ]; then
我什至发现它更清晰。
答案2
因为它们是 XSI 扩展,可能会也可能不会实现。看:http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html