lsがGLOBIGNOREを介して除外されたファイルを表示し続けるのはなぜですか?

lsがGLOBIGNOREを介して除外されたファイルを表示し続けるのはなぜですか?

ファイルはありませ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の機能にすぎません。GLOBIGNORElsGLOBIGNORE

を使用すると、echo .i*bashはファイルを一覧表示するので起動GLOBIGNOREします。を使用すると、ファイルls -als一覧表示されるのでGLOBIGNORE問題ありません。

GNUlsには同様の機能があります。無視したいパターンをコマンドラインオプションとして渡すことができます。

ls -a -I .ignoramus

答え2

GLOBIGNORE変数はbashの機能であり、影響を与えます。拡大する文書。

つまり、GLOBIGNOREはglobを使用した場合にのみ機能します。

glob は、*、?、[...] 文字を使用する「パス名拡張」の代替名です。

ls -alあるいは、simpleなどのコマンドはlsglobの結果ではないため、GLOBIGNOREを使用しません。

しかし、このようなコマンドはls -d *globを使用し、GLOBIGNOREが機能します。

GLOBIGNOREを設定(または設定解除)すると、2つの異なる方法で「パス名の拡張」に影響を与える可能性があります。

GLOBIGNOREが設定され、空ではありません。

  1. ファイル名. であり、.. 常に無視されます。
  2. dotglobシェルオプションが設定されました(ドットで始まるファイルが一致します)。

GLOBIGNOREの設定解除

  1. ファイル名.'' and.. ''は無視されません。
  2. dotglob オプションが無効です。

関連情報