私は次のことが良くないことを知っています。
for i in `ls -1 *.MOV` ;do ...
正しい構文は次のとおりです。
for i in *.MOV ;do ...
しかし、その背後にあるメカニズムは何ですか?私は、*.MOV
ファイル名について話していることをforコマンドに伝える部分は何ですか?for
「他のパラメータがない場合はファイル名が想定されます」という仮定はコードにありますか?
そして... ls
for内の出力がひどい場合、ブロックされない利用可能なファイル名のリストをどのように取得できますか?
答え1
例 :-) シェルは、ワイルドカード式に一致するファイルセット(現在のディレクトリにあるMOVファイル)にワイルドカードを拡張します。ただし、その前に6つの異なる拡張パックを検討する必要があります。
「拡張」についてはマニュアルに詳しく説明されていますman bash
。
拡張
拡張は単語に分割され、コマンドラインから行われます。中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、算術拡張、トークン化、パス名拡張など、7 種類の拡張が実行されます。
...
パス名拡張
単語分割後のbashは、-fオプションが設定されていない限り、各単語で*、?と[文字を検索します。これらの文字のいずれかが発生すると、その単語はパターンとして扱われ、パターンと一致するファイル名のアルファベット順のリストに置き換えられます(下記のパターン一致を参照)。一致するファイル名がなく、シェルオプション nullglob が有効になっていない場合、単語は変更されずにそのまま残ります。