回答:
*.*
古いWindows / DOSシステムでの解釈ここでの重要性は、Unix / LinuxよりもWindows / DOSに関連しています。古いWindows / DOSシステムでは、「ワイルドカード」パターンでした。ワイルドカードパターンは、Unixグロブと同様の方法でファイル名を照合するために使用されました。*.*
ワイルドカードは、一般的に任意のファイルを一致させるために使用されました。
Unixグロブと同様に、*
はファイル名の任意の文字シーケンスに*
一致します。それ自体は任意のファイルに一致します。ただし、*.*
どのファイル名にも一致する理由は、これらのワイルドカードの機能の違いによるものです。この記事によると:
アスタリスクはカーソルを位置12に移動するため、アスタリスクの後に続くドット以外の文字は効果がありません。位置12では、最後の3つの位置をクリアしてカーソルを移動するドットを除いて、解析状態は何も変わりません。
この動作(Unixの観点からはやや奇妙)は、aに続くドット*
が実際にドットと一致しないことを意味しますが、パターンにさらに文字を追加できるようにするための単なるハック方法です。つまり、もう1つ追加すると、*
最後の3つの位置にあるすべてのものと一致します。
これは、8.3ファイル名を必要とするWindows 95より前のDOSおよび古いWindowsシステムで構文が使用されたと考えると、もう少し意味があります。これらのファイル名には、1つのドットと、ドットに続く最大3文字しか使用できませんでした。ほとんどの場合、システム上のすべてのファイルに3文字の拡張子が付いているわけではないので(技術的にはより短いまたは拡張子が許可されていませんが)、何らかの形で*.*
(少なくともワープされたWindowseyロジックの観点から) )。
*.*
Unixシェルでの解釈Unixシェルでは、他の人が指摘しているように、これは「パス名展開」または「グロブ」を表します。*
最後の行動にどんな奇妙ジャンプを持っていないので、それは無視され、次の文字にはつながりません。*.*
patternは、ドットを含むすべてのファイル名と一致します(先頭を除く)。Unix / Linuxシステムには拡張子のない(または許可されているためドットが含まれている)ファイルが多数あるため、これはどのファイルとも一致しません。
*.*
Unixでファイル名の先頭にドットを一致させない理由は、ドットを先頭に置くことでファイルが「隠され」、隠しファイルがデフォルトでグロブから除外されるためです。POSIXシェルでこれらを一致させるには、パターンの先頭にドットを明示的に配置する必要があります。でシェルオプションを設定することができますまたは変数を適切に設定することができるが、これは別の質問です!bash
dotglob
GLOBIGNORE
それglob
はbashにあります。以下はbashのマニュアルから引用しています:
bash-GNU Bourne-Again SHell
*
NULL文字列を含む任意の文字列に一致します。globstarシェルオプションが有効
*
で、パス名展開コンテキストで*s
使用される場合、単一のパターンとして使用される2つの隣接するすべてのファイルと0個以上のディレクトリとサブディレクトリが一致します。が続く場合/
、隣接*s
する2つはディレクトリとサブディレクトリのみに一致します。
この場合、名前に*.*
ドットを含むファイルと一致します.
。
詳細はこちらをご覧ください。
それは、少なくともDOS(そして、それ以降、もちろんWindows)の世界では、スタードットスターです。DOSでは、.
ファイル名は8文字のベース(後で拡張しますが、昔ながらにしましょう)と3文字の拡張子(ファイルタイプを定義)であるため、ドットには特別な魔法の意味があります。Unixでは、ファイルの種類は通常、ファイルの最初の2バイト(またはその他の魔法)によって定義され、拡張子は情報を提供しますが、あまり意味を持ちません。これがすべてぼやけた場合を除きます。
したがって、Unixには特別な意味はありません。アスタリスクは、Unixシェルの「グロビング」文字であり、任意の数の文字(ゼロを含む)のワイルドカードです。?
は別の一般的なグロビング文字であり、任意の文字の1つと正確に一致します。
*.*
少なくとも1つを含むファイル名に一致します.
。それは特別な名前を持っているか、いずれかの任意のより多くを意味しません*a*
か*_*
。そして*.?
、ドットとそのドットの後に正確に1文字を持つファイルと一致します。さらに複雑な拡張グロビングパターンもあります。シェルのマニュアルページを参照してください。
「New Hacker's Dictionary」(古いMITの「Jargon File」の拡張版)では、「star」が*
シンボルの最も一般的な名前であり(後に続くsplat
)、実際にはそれ.
が真実であり、間違いなく一般的にはドット」なので、統合されたシンボルとしての固有の特別な意味はありませんが、Unix ではこのシーケンスはまだスタードットスターと呼ばれています。(あまり有用ではありません。)
ここには、実際にはアスタリスク*
とドットの2つのシンボルがあります.
。シェルは通常、アスタリスクのみを任意の文字として解釈しますが、正規表現では貪欲なグロブを意味します。この場合、ドットで終了または開始されず、少なくとも1つが含まれるすべてのものに一致します。
somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match
onlydotatend.
ケースは確かに一致していますか?
touch 'onlydotatend.' && echo *.*
それを返さない
bash
とdash
。どのシェルを使用していますか?
zsh
構成でこれを試しましたが、それもそこで機能します。どのようにonlydotatend.
一致できないのかわかりませんが、これを行う設定オプションはありますか
*7.*
拡張される前に、その最後の文字のすべてのファイルを取得7
し、で*sa*
、私はサブストリングを含むすべてのファイルを取得しますsa
が、ファイル名の任意の場所に、などを。(したがって、あなたが引用記事タイトルはどうやっワイルドカードが動作MS-DOSで?。(強調は自分で追加))