端末コマンドの疑問符は何を意味しますか?


回答:


15

それらはワイルドカード(グロビングパターン)と呼ばれます

標準のワイルドカード(グロビングパターンとも呼ばれます)は、複数のファイルを操作するためにさまざまなコマンドラインユーティリティで使用されます。
標準のワイルドカードは、ほぼすべてのコマンドで使用されます(mv、cp、rmなど)。

  • (question mark)

    これは、任意の1文字を表すことができます。コマンドラインで「hd?」などの何かを指定した場合 GNU / Linuxは、hda、hdb、hdc、およびa〜z、0〜9のすべての文字/数字を検索します。

  • *(asterisk)

    これは、任意の数の文字(ゼロ、つまりゼロ以上の文字を含む)を表すことができます。「cd *」を指定した場合は、「cda」、「cdrom」、「cdrecord」、および「cd」自体も含む「cd」で始まるものを使用します。「m * l」は、mill、mull、ml、およびmで始まり、lで終わるすべてのものです。

  • [ ] (square brackets)

    範囲を指定します。m [a、o、u] mを実行すると、mam、mum、momになります。m[ad] mは、mで始まりaからdまでの任意の文字を持つ任意の文字になります。たとえば、mam、mbm、mcm、mdmが機能します。この種類のワイルドカードは、「または」関係を指定します(一致するのは1つだけです)。

  • { } (curly brackets)

    用語はコンマで区切られ、各用語は何かの名前またはワイルドカードでなければなりません。このワイルドカードは、ワイルドカードまたは正確な名前(「または」関係、どちらか一方)に一致するものをすべてコピーします。


たとえば、これは有効です。

  • cp { .doc、 .pdf}〜

    これにより、.docまたは.pdfで終わるものがすべてユーザーのホームディレクトリにコピーされます。コンマ(または他の場所)の後のスペースは許可されないことに注意してください。

  • [!]

    この構造は[]構造に似ていますが、角かっこ内の文字と一致するのではなく、[と]の間にリストされていない限り、任意の文字と一致します。これは論理否定です。たとえば、rm myfile [!9]はすべてのmyfiles *(myfiles1、myfiles2など)を削除しますが、名前の9番のファイルは削除しません。

  • \ (backslash)

    「エスケープ」文字として使用されます。つまり、後続の特殊文字を保護します。したがって、「\」は円記号を検索します。引用符と円記号を使用する必要がある場合があります。

その他の例については、このページをご覧ください


3
ファイル名ではなくパッケージ名がapt-get remove必要であり、シェルによるワイルドカード拡張がほとんど役に立たないことに言及する価値があります。ある範囲のパッケージを削除したい場合は、完全な正規表現を使用する必要があり、シェルがそれをグロブ(例apt-get remove 'gnome.*')として解釈しようとするのを防ぐために適切に引用されます。

4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> FALSE。これらのワイルドカードはシェルによって展開され、コマンドが受け取るのはパターンではなく展開の結果(パターンに一致するファイル)です。(パターンに一致するファイルがない場合、そのパターンはコマンドに直接渡されます)
カルロスキャンデロス14年

17

一般的に、Bashでは、a ?は任意の文字に展開されるグロブパターンです。

例えば:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

はに似ています*が、*0文字以上に展開されますが、は1文字(任意)に?展開されます。

ただし、特殊なケース?では、コマンド内は明らかにタイプミスでした。


だから、私の場合は役に立たない/不要ですよね?
オーカー

はい。実際、質問をしたときにリンクした回答から編集されました。:)
マルテスコルッパ

1
信じられない:-o
Ooker 14年

1
たとえそれらが正しいワイルドカードであったとしても、この使用は引用することなく避けるべきです。apt-get REを理解しますgnome1が、呼び出されたファイルが現在のディレクトリに存在する場合、シェルはapt-getがそれを見る前にそれを展開します。
Rmano

@Ookerあなたは今それを決して忘れないでしょう!
comrademike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.