シンボル*。*とは何ですか?


回答:


20

*.*古い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シェルでこれらを一致させるには、パターンの先頭にドットを明示的に配置する必要があります。でシェルオプションを設定することができますまたは変数を適切に設定することができるが、これは別の質問です!bashdotglobGLOBIGNORE


1
現在のWindowsバージョンはより論理的に動作するように見えることに注意してください。特に、「アスタリスクの後に来るドット以外の文字は効果がありません」はもはや真実ではありません。標準のファイルをフィルタリングする際、少なくともファイルを開くパターンでのWindows 7上のダイアログ*7.*拡張される前に、その最後の文字のすべてのファイルを取得7し、で*sa*、私はサブストリングを含むすべてのファイルを取得しますsaが、ファイル名の任意の場所に、などを。(したがって、あなたが引用記事タイトルはどうやっワイルドカードが動作MS-DOSで。(強調は自分で追加))
ORマッパー

1
@ORMapper、これを反映するようにヘッダーを更新しました。この動作はWindows 95より前のバージョンで、答えは(ヘッダーが誤解を招くものでしたが)です。
グレアム14

11

それglobはbashにあります。以下はbashのマニュアルから引用しています:

bash-GNU Bourne-Again SHell

*

NULL文字列を含む任意の文字列に一致します。globstarシェルオプションが有効*で、パス名展開コンテキストで*s使用される場合、単一のパターンとして使用される2つの隣接するすべてのファイルと0個以上のディレクトリとサブディレクトリが一致します。が続く場合/、隣接*sする2つはディレクトリとサブディレクトリのみに一致します。

この場合、名前に*.*ドットを含むファイルと一致します.

詳細はこちらをご覧ください。


8

アスタリスク*globシェル言語です。シェルコマンド言語からの引用:

アスタリスク('*')は、ヌル文字列を含む任意の文字列に一致するパターンです。

ただし、.シェルオプションdotglobが設定されていない限り、aで始まるファイル名とは一致しません。

を使用すると*.*、次のいずれかに一致します。

  • で始まらない .
  • 少なくとも1つを含む .

また、マニュアルの「ファイル名の展開」を参照することもできます。


6

Windowsから来ている多くの人*.*は、すべてのファイルを対象としています。Windowsでは、そうです。UNIXでは、名前に少なくとも1つのドットが含まれるすべてのファイルです。*それ自体はWindowsで問題なく動作します(初期のDOSにさかのぼります)。しかし、古い教科書は出版されて*.*おり、破ることは難しい習慣のようです。


4

*「globbing」とも呼ばれるファイル名展開を実行するためにシェルで使用されるワイルドカードです。 *何も含まない(たとえば、*.*match file.など)に展開されます。他の一般的なワイルドカードは?、任意の1文字に一致するです。

これらのワイルドカードの機能を、正規表現(grepで使用される文字など)で同じ文字を使用することと混同しないでください。


3

それは、少なくともDOS(そして、それ以降、もちろんWindows)の世界では、スタードットスターです。DOSでは、.ファイル名は8文字のベース(後で拡張しますが、昔ながらにしましょう)と3文字の拡張子(ファイルタイプを定義)であるため、ドットには特別な魔法の意味があります。Unixでは、ファイルの種類は通常、ファイルの最初の2バイト(またはその他の魔法)によって定義され、拡張子は情報を提供しますが、あまり意味を持ちません。これがすべてぼやけた場合を除きます。

したがって、Unixには特別な意味はありません。アスタリスクは、Unixシェルの「グロビング」文字であり、任意の数の文字(ゼロを含む)のワイルドカードです。?は別の一般的なグロビング文字であり、任意の文字の1つと正確に一致します。

*.*少なくとも1つを含むファイル名に一致します.。それは特別な名前を持っているか、いずれかの任意のより多くを意味しません*a**_*。そして*.?、ドットとそのドットの後に正確に1文字を持つファイルと一致します。さらに複雑な拡張グロビングパターンもあります。シェルのマニュアルページを参照してください。

「New Hacker's Dictionary」(古いMITの「Jargon File」の拡張版)では、「star」が*シンボルの最も一般的な名前であり(後に続くsplat)、実際にはそれ.が真実であり、間違いなく一般的にはドット」なので、統合されたシンボルとしての固有の特別な意味はありませんが、Unix ではこのシーケンスはまだスタードットスターと呼ばれています。(あまり有用ではありません。)


これは奇妙に聞こえるかもしれませんが、「スタードットスター」に言及してくれてありがとう、それがこのページをグーグルにしたのです!
Score_Under

3

ここには、実際にはアスタリスク*とドットの2つのシンボルがあります.。シェルは通常、アスタリスクのみを任意の文字として解釈しますが、正規表現では貪欲なグロブを意味します。この場合、ドットで終了または開始されず、少なくとも1つが含まれるすべてのものに一致します。

somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match

1
あなたのonlydotatend.ケースは確かに一致していますか?
グレアム14

@Graemeいや。touch 'onlydotatend.' && echo *.*それを返さない
Braiam

1
私のために!両方のオンbashdash。どのシェルを使用していますか?
グレアム14

@Graeme zsh、そしてあなたは正しいbashはそうではありません。
Braiam

私はバニラzsh構成でこれを試しましたが、それもそこで機能します。どのようにonlydotatend.一致できないのかわかりませんが、これを行う設定オプションはありますか
グレアム14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.