私が見つけた
[ ! -f /etc/default/lxc-net ] || . /etc/default/lxc-net
Ubuntu 16.04では/etc/default/lxc
置き換えられているようです(私のコードまたはパッケージマネージャのコード)。
[ -f /etc/default/lxc-net ] && . /etc/default/lxc-net
テストは反直感的であるため(ファイルが存在しないためテストが失敗した場合はコマンドを実行します)、-versionと比較して利点があるかどうか疑問に思います&&
。
答え1
うん、気になるなら複合文の終了コード。以下を試してください。
#! /bin/sh -
! "$@" || true
echo "$?"
"$@" && true
echo "$?"
true
次に、false
引数を使用して実行します。
./script true
0
0
./script false
0
1
このためです段落評価ブール式。
OPの例では、ファイルが存在しません:
- 最初の場合、最初の条件は2番目の操作(
TRUE OR x = TRUE
)を評価せずにTRUEを返します。複合文の結果はTRUEです。 - 2番目のケースでは、最初の条件は2番目の操作(
FALSE AND x = FALSE
)を評価せずにFALSEを返します。複合文の結果はFALSEです。
終了コードは非常に重要です。確認するbashスクリプトのset -eはどういう意味ですか?set -e
、trap
およびの可能な意味を確認してくださいset -o pipefail
。
答え2
[ -f file ]
file
存在する場合はtrueそしてですplain file
。
[ ! -f file ]
file
存在しない場合は真または別のファイル形式です。
したがって、読みやすさ以外には実質的な違いはありません。