次のコードを見てください、
snap=snapshot.file
touch snapshot.file-1
$ [ -a $snap-1 ] && echo yes
yes
test -a
コマンドはここで何をテストしますか?
info coreutils 'test invocation'
を試し、-a
を検索しましたが、ファイル特性テストセクションではなく、テストセクションの接続詞。
そのようなtest -a
コマンドは文書化されていない 1つですか?
注意、私のシステムはUbuntu 13.10で、私のman test
はGNU coreutils 8.20 2012年10月TEST(1)と言っています。
info
ページにそれがない理由はわかりませんが、bash
でhelp test
を実行すると答えが得られます。
...
File operators:
-a FILE True if file exists.
...
したがって、これは単なる「存在」テストであり、他の権限/属性はチェックされません。
test
でbash
または[
を実行している場合、それは実際にはおそらく組み込みバージョンであり、/usr/bin
のcoreutils
バージョンではありません。 :
$ type test
test is a Shell builtin
$ type [
[ is a Shell builtin
そうは言っても、coreutilsバージョンは-a
と-e
の両方を実装しており、まったく同じ動作をしているようです。 -a
は 標準 ではないため、マンページに反映されていない可能性があります。そのため、後で追加され、その人がそれに応じてマンページを更新しなかった可能性があります。しかし、なぜそれが追加されたのか(またはa
が何の略であると思われるのか)の背後にある歴史を私が知っているとは言えません。
-a
は条件を組み合わせるためのAND演算子であるため、両方のディレクトリが存在する場合、以下はyesを示します。
[-e/root -a -e/usr] && echo yes
デフォルトで存在テストになる単一の条件でそれを使用すると、古い動作が保持されているように見えますが、古いマニュアルページでは見つかりません。
参照(info coreutils 'test invocation'
の後にスクロールダウン):
16.3.6「テスト」用の接続詞
通常の論理接続詞。
`! EXPR'EXPRがfalseの場合はtrue。
「EXPR1-aEXPR2」EXPR1とEXPR2の両方が真の場合に真。
「EXPR1-oEXPR2」EXPR1またはEXPR2のいずれかが真の場合に真。