2016-10-06 26 views
1

私はbash globbing式について何か誤解しているので、ここに投稿しています。私は、POSIXや表現のこの特定のタイプ(角括弧付きのもの)の定義を読んで、そしてテストしながら、私はそのテストをした:BASH - 大括弧で囲まれた式:[...-...]

bash-3.2$ ls 
a.out c.cou tab_maker.c 

bash-3.2$ ls [!c-t] 
ls: [!c-t]: No such file or directory 

bash-3.2$ ls [!c-t]* 
a.out 

bash-3.2$ ls [!c-to]* 
a.out 

bash-3.2$ ls [!cv-to]* 
a.out tab_maker.c 

bash-3.2$ 

私は理解していないことはどのようにbashはこれを解釈するんですコマンド? ls [!c-t]*を実行すると、bashはa.outだけをキャッチします(これは私には論理的ですが)。なぜ、最後のテストでtab_maker.cをキャッチしますか?私が知るべきことがあるか、それとも未定義の行動ですか?

+0

スクリーンショットにリンクするのではなく、質問にコードを貼り付けてください。 – choroba

+0

それは申し訳ありません:) –

答えて

1

vtの間に文字がないため、[v-t]と一致するものはありません。したがって、[!cv-to]は、[!co]に相当します。

代わりに[t-v]を試してください。

+0

うーん、私は本当にそれがなぜそれを理解していない。大括弧の間のダッシュの各辺に1文字以上を入力すると、何らかの優先順位がありますか? –

+0

't'と' v'の間に 't、u、v'があります。 'v'と' t'の間には何もありません。 '-'の前の文字は、それに続く文字の前にアルファベット順に(または同じであっても)先行する必要があります。 – choroba

+0

私が理解していないことは、[[!co]と同等の '[cv-to] 'を検討している理由です。私が理解できないことは、そのタイプのコマンドのルールは何ですか?例えば、私が '' [!ct-vo] 'を実行したとき、' 't-v'だけを考えて' 'c''と' o'を考えていないのでしょうか? –