POSIXコマンドのパラメータはfind
複数文字のパラメータ名に単一のハイフンを追加しますが、他のほとんどのプログラムは単一のハイフンを使用して複数の単一文字フラグを表すために使用し、複数の文字を含む単一のパラメータ名を表すために二重ハイフンを使用する理由は何ですか?
一貫性がないようで気になります。
A.それが実際に矛盾しない理由、または
B.決定の歴史。
答え1
POSIX find は他のコマンドと同じオプションをサポートし、--
他のコマンドと同様にオプションの終わりを表示します。これらは-H
とです-L
。
これは-print
...-type
オプションではなく、時にはスルブ。これは順序が重要な引数であり、オプションの後に表示されるファイルパスの後に表示されます。また、(
と!
。彼らは一緒に表現する検索するファイルを決定するために使用されます。
find
唯一のものではありません。[
(別名test
)とexpr
引数がビルドに使用される他のコマンド。表現する。
たとえばfind
、 [
andで始まり、2つ以上の文字(、...)を含む-
演算子があります。-gt
-eq
同様にfind
、test
そのような質問があります。オペレーター混乱する可能性がありますオペランド。
find -- "$file1" "$file2" -type f
[ -f "$file1" -a -f "$file2" ]
それなら何か問題があるの$file2
です。もしそうなら、それは(一部)の問題です。!
find
=
[
すべてとfind
オプションtest
をexpr
使用して式を作成することは実際には機能しません。別のオプションは、文字列をまたはawk
同じ式で評価することですsed
。絵
find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} +
する:
find 'found = 0
if (typeof($f) == "f") {
if (age($f) > 1) found=1
} else if (age($f) < age("x")) found = 1
if ($found) exec_multi("ls -ld {}")' f1 f2
ただし、これは上記とコマンドラインが引用悪夢を引き起こす可能性があることをfind
意味します。"x"
実際、AT&T Researchは次のコマンドを発行しました。台湾(トリウォーカー)、ところで今はオープンソースなのに実際にAT&Tの外部で使われるのか分からない。
答え2
find
--
複数文字オプションのGNUルールよりも優先されます。 GNUは、単一文字オプション(-bar
3つのオプションを意味する-b -a -r
)を持つプログラムと、複数文字オプション(対応する名前の単一オプションを意味する)を持つプログラムとの間-bar
の既存の矛盾を破るためにこの規則を導入しました。 GNU が出ると、将来のプログラムに影響を与える可能性がありますが、find
X11 ユーティリティなどの既存のプログラムは変更されません。
find
オプションと少し似ているため、述語と操作の接頭辞として使用されます-
。特定のコマンドに適した有限集合の一部であるキーワード。オプションのように解析されませんが、アルファベット順にオプションと似ています。
答え3
特別さを探すという意識的な決定はなかったようです。他には参考になることはありません。これ電子メール交換、しかし私が覚えている限り(findは18世紀半ばから使用されました):
まず、オプションと引数(プログラムのコマンドライン引数)を指定するための標準がないことに注意してください。さまざまなプログラムがさまざまな作業方法を実装しています。ある時点では、オプションの単一ダッシュと引数の非ダッシュ文字が通常のコマンドで再利用/コピーされ、C ++バージョン(getopt
シェルまたはCバージョン)を使用できるようになりました。 (私が作業した* nixライブラリにはそのバージョンがないので、私のバージョンを直接コンパイルする必要があったことを覚えています。)
もちろん、単一ダッシュ、単一文字オプションはtty制限に準拠しています(コマンドの短縮(cp
vs. copy
)も発生しますが、これは自己説明ではありません。)長いオプションの二重ダッシュが--
普及する前(IIRC中期)彼らはそうしました。
元のマニュアルページの一番下には次のものがあります。
BUGS
The syntax is painful.