パイプラインの最初のプログラムではなく、プログラムに対してワイルドカードを拡張する必要がありますか?各例では、パイプラインの最初のプログラムにワイルドカードを使用しています。
たとえば、次は機能しません。
ls|grep *.h
これにより、ワイルドカード(?)を拡張するシェルではなくgrepになります。
ls|grep -E "*.h"
ワイルドカードが最初のパイプではない例はありますか?私が尋ねる理由は、たとえばシェルを実装していて、パイプラインの最初のプログラムにワイルドカードを使用することですが、ls *.h
後続のパイプラインではこれを行う必要があるかどうかわかりません。
背景は、私が独自のシェルを作成し、ワイルドカードを実装したということです。
$ ls *.c|grep mai
[21822]
main.c
$
ベストアンサー1
一例:
$ echo jeff > jeff
$ echo not > not
$ echo 's/jeff/not/' | sed -i -f - *
$ cat jeff
not
標準シェルでファイル名/パス名拡張(ワイルドカード)を処理する方法の詳細については、以下を参照してください。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_06それは言う:
フィールド分割後にset -fが適用されない場合、結果のコマンドラインの各フィールドは、ファイル名の拡張に使用されるパターンの規則に従って、限定されたパターン一致表記に記載されているアルゴリズムを使用して拡張する必要があります。