1

[max | min] .txtのような名前パターンのリストファイルが欲しいので ls [max|min].txt、bashシェルで実行しますが、機能せず、次のエラーメッセージが表示されます 。ls:アクセスできません[max:そのようなファイルはありませんまたはディレクトリ

それで、この仕事をする正しい方法は何ですか?

4

2 に答える 2

4

角かっこは文字照合用で、縦棒はパイプ用です。ブレースの拡張を探しています。

ls {max,min}.txt
于 2012-05-28T06:47:04.380 に答える
1

Bashにはextglob、コマンドで有効にできるというシェルオプションがありますshopt -s extglob。これにより、パターンフォーマットを使用できるようになります@(pattern-list)。ここpattern-listで、はパイプで区切られたパターンのリストです。[abc]範囲式と同様に、ファイル名と一致し、ファイル名と一致しないパターンを除外します。Bashにも中括弧の展開がありますが、中括弧の展開はファイル名と一致しないか、ワイルドカードや範囲式のように展開されないため、これはあなたが求めているものではないようです。

$ shopt -s extglob
$ touch max.txt min.txt
$ echo @(max|min).txt
max.txt min.txt
$ echo @(min|mid|max).txt
max.txt min.txt
$ echo {min,mid,max}.txt
min.txt mid.txt max.txt

上記のコマンドのシーケンスについて注意すべき点がいくつかあります。

  1. echo @(mid|min|max).txtmid.txt一致するファイルがないため、出力されません。
  2. echo @(min|mid|max).txtワイルドカード展開と同じ方法で、ソートする出力を並べ替えます。
  3. echo {min,mid,max}.txtブレース拡張であり、指定された順序ですべての要素を出力します。
于 2012-05-28T12:43:20.443 に答える