コマンドの複数のパラメータにワイルドカードを適用できますか?

コマンドの複数のパラメータにワイルドカードを適用できますか?

私は現在シェルを実装しており、よく知られているシェルに基づいてワイルドカードの動作を模倣したいと思います。

foo2つのファイル名パラメータを必要とするコマンドがあるとします。それは:

foo file1.txt file2.txt

正しい使い方です。また、現在のディレクトリに次のファイルがあるとします。

file1.txt
file2.txt
file3.txt

file1.dat
file4.dat

シェル(たとえば、Bash)でコマンドを実行するときに複数のglob引数を使用できますか?例えば、

foo *.txt *.dat

それでは、これは何を意味するか評価するのですか?どの組み合わせが次のように行われるかを知りたいです。

foo file1.txt file1.dat
foo file2.txt file4.dat
...

よろしくお願いします!

ベストアンサー1

確かに。質問にかかる時間より短い時間で直接試してみることができます。

Unixシェル(bashなど)はワイルドカードを拡張します。今後このプログラムを呼び出してください。プログラム自体では、パラメータの事前拡張バージョンを表示できません。

したがって、あなたの例ではfoo複数の引数として呼び出され、最初の引数は拡張子になり、*.txt最後の引数は拡張子になります*.dat

通常、拡張子は*.txt現在のディレクトリにあります.txt。それ以外の場合、拡張子は*.txt変更されません*.txt。これはおよびによってshopt -s nullglob変更される可能性があります。set -f

おすすめ記事