私は最近bash globbingで遊んで、次のことを見つけました。
まず、2つのディレクトリを作成します。
$ mkdir test
$ mkdir test2
それから:
$ echo test?
出力(正しい):
test2
しかし:
$ ls test?
何も出力されません...
ただし、もう1つのディレクトリ(test3)を作成すると、期待どおりecho
に機能しますls
。
なぜこれが起こるのか知っている人がいますか?
答え1
基本から理解してみましょう。
mkdir test
touch file
mkdir test1
mkdir test2
?
単一の文字のみを検索します。
今コマンドを実行すると、ls tes?
出力はfile
。
ディレクトリにファイルを作成するので、うまくいきます。マニュアルページls
から
NAME
ls - list directory contents
ディレクトリには内部構造がtest
あるため、コマンドは実際にディレクトリにあるファイルを一覧表示します。file
ls
それでは、次のようにファイルを作成しましょう。
touch ramesh
ls rames?
ramesh
上記のコマンドが機能する理由は、ファイルが存在し、ramesh
現在のディレクトリに存在するためです(workによると、ディレクトリの内容を一覧ls
表示し、実際に現在のディレクトリにファイル名がありますramesh
)。
それでは、次のような名前のディレクトリを作成してみましょうram1
。
mkdir ram1
ls ram?
上記は何も出力しません。これはram1
、現在ディレクトリにファイルがないためです。という名前の別のディレクトリを作成しようram2
とすると、ram1
まずディレクトリにファイルがあることを確認してから、ディレクトリにファイルがram2
あるかどうかを確認します。ls
ソートの役割を覚えてください。
内部動作について詳しく知りたい場合は、stat
コマンドを実行してください。
この場合、stat ram?
次のような出力が生成されます。
File: `ram1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 805h/2053d Inode: 6743976 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-06-30 18:17:06.000000000 -0500
Modify: 2014-06-30 18:17:03.000000000 -0500
Change: 2014-06-30 18:17:03.000000000 -0500