Mat*_*teo 9 shell shell-script posix test
我用checkbashisms检查了我的脚本,并收到以下警告:
possible bashism in check_ssl_cert line 821 (test -a/-o):
if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then
Run Code Online (Sandbox Code Playgroud)
主要 -a 主要 执行二进制和主要和主要的结果。-a 运算符优先于 -o 运算符。
为什么-a
和-o
考虑非便携?
Sté*_*las 11
并不是说它不可移植,而是没有[
实现在传递超过 4 个参数时它是可靠的。
即使在 bash 中:
$ ALTNAMES='=' bash -c '[ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ]'
bash: line 0: [: too many arguments
Run Code Online (Sandbox Code Playgroud)
相关部分指出:
>4 个参数:
结果是不确定的。
[OB XSI] [Option Start] 在符合 XSI 的系统上,应使用前面描述的优先级和关联性规则评估原语和运算符的组合。此外,字符串比较二元基元 '=' 和 "!=" 应比任何一元基元具有更高的优先级。[选项结束]
-a
并且-o
应该被禁止。正确的方法是改用&&
和||
shell运算符:
if [ -n "$foo" ] && [ -n "$bar" ]; then
Run Code Online (Sandbox Code Playgroud)
我什至觉得它更易读。
归档时间: |
|
查看次数: |
1063 次 |
最近记录: |