私は現在シェルを実装しており、よく知られているシェルに基づいてワイルドカードの動作を模倣したいと思います。
foo
2つのファイル名パラメータを必要とするコマンドがあるとします。それは:
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