「ls name」と「ls | 「grep name」のアクセントが異なります。

「ls name」と「ls | 「grep name」のアクセントが異なります。

私はXigmanas(NAS freebsd)を使用しています。状況をできるだけ簡単に説明します。

:;  set | egrep 'LC_A|LANG'
GDM_LANG=fr_FR.UTF-8
LANG=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
SLIM_LANG=fr_FR.UTF-8

:;  ls -i  1989* ; ls -i | grep 1989 ;  ls -ib  1989* ; ls -ib | grep 1989
9920 1989 Amn??sia.mp4
 9920 1989 Amnésia.mp4
9920 1989 Amn\303\251sia.mp4
 9920 1989 Amn\303\251sia.mp4

lsこれはアクセントのみを変換した次のチャンネルを占めることではありませんgrep

パイプは特にストリームを変更してバイトストリームを変更してはいけませんので、説明は見えません!

ls後続のgrepマークは正確ですが、ls個々のマークは正しくありません。

どうなりますか?

答え1

これは働きます:

ls --show-control-chars A*
Amnésia

これと同じです。

ls A* | cat
Amnésia

ls私のバージョンのDebian()文書にls (GNU coreutils) 8.32よると、

--show-control-charsグラフィック以外の文字をそのまま表示します([...]出力が端末でない場合のデフォルト)

é\303\251UTF-8ロケールに表示される2バイト()は、グラフィック以外の文字ではなく印刷文字として扱われる必要があるため、これはバグになる可能性があります。


今は再現できません。exportロケール変数はありますか?このコマンドで一連の結果を取得する必要があります。

env | egrep 'LC_A|LANG'

そうでない場合は、export環境にロケール変数を追加してみてください。

eval $(LC_ALL=fr_FR.UTF-8 locale | sed 's/^/export /' )

それからもう一度やり直してください。

ls A*
Amnésia

関連情報