ファイルはありませecho
んが存在しますls -a
。なぜ?
bojan@hyperion:~$ touch .ignoramus
bojan@localhost:~$ ls -al | grep ignor
-rw-rw-r-- 1 bojan bojan 0 Apr 19 19:05 .ignoramus
bojan@localhost:~$ GLOBIGNORE=".ignoramus";
bojan@localhost:~$ echo .i*
.icons
bojan@localhost:~$ ls -al | grep ignor
-rw-rw-r-- 1 bojan bojan 0 Apr 19 19:05 .ignoramus
bojan@localhost:~$ echo $GLOBIGNORE
.ignoramus
人々は-a
表示して隠すだけだと言ったが、GLOBIGNOREについては言及しなかった。
-a, --all
do not ignore entries starting with .
ls (GNU coreutils) 8.23
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
答え1
設定はGLOBIGNORE
何の影響も与えずls
、気にしないためls
マニュアルにも記載されていません。これは、globモードでいくつかのファイルを省略するbashの機能にすぎません。GLOBIGNORE
ls
GLOBIGNORE
を使用すると、echo .i*
bashはファイルを一覧表示するので起動GLOBIGNORE
します。を使用すると、ファイルls -a
がls
一覧表示されるのでGLOBIGNORE
問題ありません。
GNUls
には同様の機能があります。無視したいパターンをコマンドラインオプションとして渡すことができます。
ls -a -I .ignoramus
答え2
GLOBIGNORE変数はbashの機能であり、影響を与えます。拡大する文書。
つまり、GLOBIGNOREはglobを使用した場合にのみ機能します。
glob は、*、?、[...] 文字を使用する「パス名拡張」の代替名です。
ls -al
あるいは、simpleなどのコマンドはls
globの結果ではないため、GLOBIGNOREを使用しません。
しかし、このようなコマンドはls -d *
globを使用し、GLOBIGNOREが機能します。
GLOBIGNOREを設定(または設定解除)すると、2つの異なる方法で「パス名の拡張」に影響を与える可能性があります。
GLOBIGNOREが設定され、空ではありません。
- ファイル名
.
であり、..
常に無視されます。 - dotglobシェルオプションが設定されました(ドットで始まるファイルが一致します)。
GLOBIGNOREの設定解除
- ファイル名
.'' and
.. ''は無視されません。 - dotglob オプションが無効です。