私は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\251
UTF-8ロケールに表示される2バイト()は、グラフィック以外の文字ではなく印刷文字として扱われる必要があるため、これはバグになる可能性があります。
今は再現できません。export
ロケール変数はありますか?このコマンドで一連の結果を取得する必要があります。
env | egrep 'LC_A|LANG'
そうでない場合は、export
環境にロケール変数を追加してみてください。
eval $(LC_ALL=fr_FR.UTF-8 locale | sed 's/^/export /' )
それからもう一度やり直してください。
ls A*
Amnésia