POSIXとBash(shの略)は複合if文に使用されます。

POSIXとBash(shの略)は複合if文に使用されます。

私はsh速記で​​コマンドを実行することを好み、POSIXを使用することを好みます。正直なところ、スクリプトがDashで実行できる場合はそれで十分です。これは[、拡張コマンドではなくテストコマンドを使用することを意味します[[

不明な自動起動スクリプトの例があります。

if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
   eval `dbus-launch --sh-syntax --exit-with-session`
fi

だから私の考えでは、dbus-launchsumが$DBUS_SESSION_BUS_ADDRESS空であれば実行してくださいeval。これをどのように短縮できますか?このトピックについてご協力いただきありがとうございます。

答え1

あなたが投稿したコードスニペットはPOSIX正当であり、そのままうまく機能しますdash。 sを削除して1行のコードに置き換えることは意味がないと思いますif。なぜなら、コードを読みにくくする以外に、あまり役に立たないからです。しかし、この場合は1行なので、単に、ifを削除して、つまりに置き換える; thenだけです。fi; then&&

which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS" && 
eval `dbus-launch --sh-syntax --exit-with-session`

質問のスニペットと機能的に同じでなければなりません。また、これが「速記」が意味するものであれば、これは一般的な用語や標準的な用語ではなく、入力文字をあまり節約できないと思います。 複合コマンドをifリストに変換より正確な説明になります。

関連情報