POSIXテストと-a

POSIXテストと-a

スクリプトを確認しました中断注意次の警告が表示されます。

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

もっと明確だと思います。

おすすめ記事