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


3

次のコードをご覧ください。

snap=snapshot.file   
touch snapshot.file-1

$ [ -a $snap-1 ] && echo yes 
yes

test -aここでコマンドは何をテストしますか?

私が試したinfo coreutils 'test invocation'と探し-aたが、それを見つけることができませんでしたファイル特性試験のセクションではなく、中のテストのための結合子セクション。

そのようなtest -aコマンドは文書化されていないものですか?

NB、私のシステムはUbuntu 13.10で、私のman test言うGNU coreutils 8.20 October 2012 TEST(1)

回答:


3

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

...
    File operators:

  -a FILE        True if file exists.
...

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


パーフェクト!ありがとう。奇妙な、man testそれもありません。するだけhelp testです。それはbash 特定のファイル存在テストであることを意味しますか?
xpt 14年

1
@xptそれはそうであるように思えますが、私にとって/bin/test -a fileも働いていました...だから、それがマンページにない理由はわかりません。
BenjiWiebe

3

あなたが実行している場合test[bash、それはおそらく、実際に内蔵されたバージョンだ、とないcoreutilsバージョンで/usr/bin

$ type test
test is a shell builtin
$ type [
[ is a shell builtin

つまり、coreutilsのバージョンは両方を実装していることを表示されない、と述べた-a-eまったく同じ動作で、。たぶん-aそれは標準ではないので、マンページに反映されていないかもしれません。したがって、後で追加され、その人がそれに応じてマンページを更新するのを怠ったかもしれません。しかし、なぜそれが追加されたのか(あるいは何aが短いと思われるのか)の背後にある歴史を知っているとは言えません。


1

-a は条件を結合するためのAND演算子であるため、両方のディレクトリが存在する場合、以下はyesを示します。

[-e / root -a -e / usr] && echo yes

存在テストをデフォルトとする単一の条件でこれを使用すると、古い動作が保持されるように見えますが、古いマニュアルページにはありません。

参照(の後にスクロールダウンinfo coreutils 'test invocation'):

16.3.6「テスト」の接続詞

通常の論理接続詞。

`!EXPR 'EXPRが偽の場合は真。

`EXPR1 -a EXPR2 'EXPR1とEXPR2の両方が真の場合に真。

`EXPR1 -o EXPR2 'EXPR1またはEXPR2のいずれかが真の場合に真。


1
coreutilsのソースを見ると、aとのeケースは単項演算子を処理する関数で同じコードを共有しているので、偶然とは思わない。
jjlin 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.