web-dev-qa-db-ja.com

Linuxテスト-コマンドテストとは何ですか?

次のコードを見てください、

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 testGNU coreutils 8.20 2012年10月TEST(1)と言っています。

3
xpt

infoページにそれがない理由はわかりませんが、bashhelp testを実行すると答えが得られます。

...
    File operators:

  -a FILE        True if file exists.
...

したがって、これは単なる「存在」テストであり、他の権限/属性はチェックされません。

3
BenjiWiebe

testbashまたは[を実行している場合、それは実際にはおそらく組み込みバージョンであり、/usr/bincoreutilsバージョンではありません。 :

$ type test
test is a Shell builtin
$ type [
[ is a Shell builtin

そうは言っても、coreutilsバージョンは-a-eの両方を実装しており、まったく同じ動作をしているようです。 -a標準 ではないため、マンページに反映されていない可能性があります。そのため、後で追加され、その人がそれに応じてマンページを更新しなかった可能性があります。しかし、なぜそれが追加されたのか(またはaが何の略であると思われるのか)の背後にある歴史を私が知っているとは言えません。

3
jjlin

-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のいずれかが真の場合に真。

1
Brian