ls .*がls ./.*と異なるファイルを表示するのはなぜですか?

ls .*がls ./.*と異なるファイルを表示するのはなぜですか?

現在、ディレクトリに空のファイル.ignoramusがあります。

bojan@localhost:~$ echo $GLOBIGNORE
.ignoramus
bojan@localhost:~$ ls .* | grep ignor
bojan@localhost:~$ ls ./.* | grep ignor
./.ignoramus

使用済みツール ls(GNU coreutils) 8.23 GNU bash, バージョン 4.3.42(1)-リリース(x86_64-pc-linux-gnu)

ベストアンサー1

この設定は、コマンドラインでワイルドカード文字を展開すると$GLOBIGNOREシェルによって処理されます。最初のケースでは、シェルは最初.*に展開されます.ignoramus。これは一致するため、$GLOBIGNOREに渡された名前には含まれませんls

2番目のケースでは、シェルは次のよう./.*に展開されます。./.ignoramusいいえ$GLOBIGNOREに設定すると、$GLOBIGNORE2.ignoramus:./.ignoramus番目のコマンドの動作が最初のコマンドと一致します。

おすすめ記事