
ssh1% cat temp
sarah
saab
marrrrrrrrra
marrrrrrrtha
ssh1% grep ar*a temp
grep: No match.
これは出力ではないでしょうか?
sarah saab marrrrrra
Windows 10 で putty と nxclient を使ってみました。
答え1
を使用していますcsh
が、これは を認識し*
、それを として展開しようとします。シェルグロブ失敗します。つまり、csh
ここでは「一致なし」と言っているのであって、 ではありませんgrep
。ボーン家の貝殻は、csh
展開不可能な glob パターンをコマンドに渡さないので、csh
に解放するには引用符で囲む必要がありますgrep
。
ここではシングルクォートの使用をお勧めします。補間する変数を文字列に代入します:
% grep 'ar*a' temp
sarah
saab
marrrrrrrrra
この場合、パターンに が含まれていないため$
、二重引用符も機能しますが、ここではとにかく一重引用符を使用することをお勧めします。シェル、Perl など、半互換的に使用できる言語では、どの引用符を使用するかを慎重に検討することは、習得する価値のある習慣です。ここでは文字列の補間は必要ないため、それを許可する引用符スタイルを使用しないことを選択します。
ところで、BourneファミリーシェルでもREパターンを引用符で囲む必要があります。Mike Wagnerが上記のコメントで示唆しているように、正規表現とglobパターンは同じ特殊文字を多く使用する、REパターンを次のように書くこともできます。起こる一部のファイルにも一致するため、シェルによって予期せず拡張されます。