- 書式
- test [EXPRESSION]
- 書式
- [ [EXPRESSION] ]
概要
test
コマンドは与えられた式をテストし、 終了ステータス を
- 真ならばを0に
- 偽ならば1に
設定します。
式は1つ以上の
演算子と引数から成り立っています。
fishでは最初の形式
test
の方が好まれます。
他のシェルとの互換性のために、
2番目の形式が用意されています
( [ [EXPRESSION] ]
)。
fishの test
はほぼPOSIX互換です。
演算子
演算子が真になる条件です。
ファイルとディレクトリ関連
-b FILE
- ブロックデバイス
-c FILE
- キャラクタデバイス
-d FILE
- ディレクトリ
-e FILE
- 存在する
-f FILE
- 通常のファイル
-g FILE
- setgidアクセス権を持つ
-G FILE
- 存在し、ユーザと同じグループIDである
-L FILE
- シンボリックリンク
-O FILE
- 存在し、ユーザ所有である
-p FILE
- 名前付きパイプ
-r FILE
- 読み込み可能
-s FILE
- ファイルサイズが0より大きい
(空ファイルではない) -S FILE
- ソケット
-t FD
- 端末である
-u FILE
- setuidアクセス権を持つ
-w FILE
- 書き込み可能。
ただし、ファイルシステムが
読み込み専用であることまではチェックしない -x FILE
- 実行可能
文字列関連
STRING1 = STRING2
STRING1
とSTRING2
が同じSTRING1 !=
STRING2
STRING1
とSTRING2
が異なる ·-n STRING
- 空文字列ではない
-z STRING
- 空文字列である
整数関連
NUM1 -eq NUM2
NUM1
とNUM2
が同値NUM1 -ne NUM2
NUM1
とNUM2
が同値ではないNUM1 -gt NUM2
NUM1 > NUM2
NUM1 -ge NUM2
NUM1 ≧ NUM2
NUM1 -lt NUM2
NUM1 < NUM2
NUM1 -le NUM2
NUM1 ≦ NUM2
整数のみサポートしています。
有理数などより複雑な数値計算は、
env
プログラムが役立ちます。
(これ原文おかしい!)
OSのドキュメント
を参照してください。
訳注: bc
とかでは?
他にもプログラミング言語
インタプリタが使えます。
式を組み合わせる
COND1 -a COND2
COND1
とCOND2
の両方が真COND1 -o COND2
COND1
とCOND2
のどちらかが真
!
演算子で
条件式の真偽を反転できます。
! EXPRESSION
EXPRESSION
が偽
括弧で囲むことで
条件式をまとめられます。
( EXPRESSION )
は EXPRESSION
の値を返します。
なお、 コマンド置換 として
解釈されるのを防ぐために、
\(
とエスケープが必要になります。
実行例
以下の例では、
/tmp
ディレクトリが存在するときに
/etc/motd
を /tmp
にコピーする
if test -d /tmp cp /etc/motd /tmp/motd end
以下の例では、
MANPATH
が定義されて
空ではないときに、
その内容を表示します。
(MANPATH
が未定義の場合、
クオートしないとゼロ引数に展開されます。)
if test -n '$MANPATH' echo $MANPATH end
括弧と -o
と -a
を組み合わせると、
より複雑な式を作成できます。
以下の例では、
/foo
か /bar
ファイルがあり、
かつ /baz
か /bat
ファイルがあるときに
Success
と表示します。
if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \) echo Success. end.
整数比較は
一方のオペランドが
整数ではないときには
失敗します。
if test 42 -eq 'The answer to life, the universe and everything' echo So long and thanks for all the fish # 実行されない end
$status
との比較は一般的です。
if test $status -eq 0 echo 'Previous command succeeded' end
標準
test
コマンドは
IEEE Std 1003.1-2008 (POSIX.1)の
サブセットを実装しています。
2つの例外があります。
文字列比較の <
と >
は
実装していません。
また、この test
コマンドは
シェルのビルトインで、
スタンドアロンなユーティリティではないので、
標準入出力などの
特別なファイルディスクリプタに対して
-c
を使っても、
パイプライン内から起動されたときと
別のシェルから
test
ユーティリティを起動したときと
同じ結果を得られないことがあります。
以上のケースでは、
fishのビルトインの test
ではなくて、
スタンドアロンの test
ユーティリティを
使ってください。
最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。
文字列関連の項目の
> STRING1 ! STRING2=
> STRING1 と STRING2 が異なる ·
の比較は STRING1 != STRING2
ではないでしょうか。
公式ドキュメントと違いがあったので質問させていただきました。
御指摘ありがとうございます。
マークアップ上のミスでした。