スクリプトを確認しました中断注意次の警告が表示されます。
possible bashism in check_ssl_cert line 821 (test -a/-o):
if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then
存在するPOSIX仕様セクション4.62.4私が見つけた
Primary -a 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] [オプションの開始] XSI互換システムでは、基本と演算子の組み合わせは、前述の優先順位と関連規則を使用して評価する必要があります。また、文字列比較バイナリ専攻 "=" および "!=" は単項専攻より優先順位が高くなければなりません。 [オプション終了]
-a
-o
禁止する必要があります。正しい方法は以下を使用することです&&
。||
シェル演算子に変更:
if [ -n "$foo" ] && [ -n "$bar" ]; then
もっと明確だと思います。
答え2
XSI 拡張であるため、実装することも実装しない場合もあります。望むより:http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html