ファイルマスク(ワイルドカード)で次の文字が使用されていることは誰もが知っています
。 および
〜 。
また、ワイルドカードに適合するファイルエンティティが存在する場合、後者はシェルによってスペースで区切られた値のリストに展開され、その後のみ引数のリストが変更された状態でコマンドが実行されます。 適切なファイルエンティティがない場合、パターンは変更されません。
簡単な視覚的な例 $ mkdir test $ cd test $ echo file* file* $ touch file1 $ echo file* file1 $ touch file2 $ echo file* file1 file2
つまり、ワイルドカードを使用すると、機能するコマンド、場合によっては機能しないコマンド、場合によっては方法がわからないコマンドを取得できます。 これは、ワイルドカードを引用符で囲むだけで修正されます。
連続してすべてを引用する必要はありません。そのため、ワイルドカードではない単純な単語や正規表現が引用符なしで使用されることがよくあります。
上記はよく知られていますが、* nixが
[abc]形式の文字の
ワイルドカード列挙をサポートしていることを誰もが知っているわけではありません。
このケースでは、シェルはマスクを「開き」、長い文字列を
grepに渡して、コマンド「ls -1 | grep file1 file2 file3 file4 file5」。 この場合、grepはファイルfile2、file3、file4、file5で文字列file1を探しますが、ファイルが空なので何も返しません(明確にするために
mickvavに感謝します)。
適切なファイルがないディレクトリで
ワイルドカードを含むコマンドを実行した場合、コマンドは変更されず、前の例のように「
* 」が表示されます。
$ cd ..;echo file[1-5] file[1-5]
ちなみに、多くの初心者は、よく知られている古いマスクを使用していても、たとえば
findコマンドを実行したときに次のようなエラーを犯し
ます 。
$ find . -name file* find: paths must precede expression: file2
結論:引用符を使用してください!
ワイルドカードの文字列挙は、
範囲と
反転の両方をサポートし
ます 。 例: