Linux 从文件读写

Linux 从文件读写,linux,bash,locale,glibc,Linux,Bash,Locale,Glibc,我对linux语言环境有很多疑问,尤其是不同的编码。 1.在bash中执行以下命令时使用哪个语言环境 // Привет - Russian "Hello" echo "Привет" > ./test.txt 据我所知,它应该使用通过locale命令获取的locale 经过一些改变语言环境的实验后,我总是通过cat./test.txt在控制台上得到正确的答案。/test.txt 没有。数据在引号之间一字不差地写入。如果文件是UTF-8,它将被写入UTF-8 为什么当我从“ru_-ru

我对linux语言环境有很多疑问,尤其是不同的编码。 1.在bash中执行以下命令时使用哪个语言环境

// Привет - Russian "Hello"
echo "Привет" > ./test.txt 
据我所知,它应该使用通过
locale
命令获取的locale

经过一些改变语言环境的实验后,我总是通过
cat./test.txt
在控制台上得到正确的答案<但是为什么呢?为什么当我从
“ru_ru.iso88595”
“ru_ru.koi8r”
等更改区域设置时,总是得到正确的结果?

这是否意味着实际上我的语言环境没有改变?或者文件编码独立于当前区域设置

注意:当我通过
export LC\u ALL=“ru\u ru.iso88595”
设置LC\u ALL时,我得到
bash:warning:setlocale:LC\u ALL:cannot change locale(ru\u ru.iso88595)
,但是
echo$?
给了我
0
之后
locale
返回新的区域设置。这个地区真的设置好了吗

在bash中执行以下命令时使用哪个语言环境

// Привет - Russian "Hello"
echo "Привет" > ./test.txt 
echo“Пццццц”>。/test.txt

没有。数据在引号之间一字不差地写入。如果文件是UTF-8,它将被写入UTF-8

为什么当我从“ru_-ru.iso88595”、“ru_-ru.koi8r”等更改语言环境时,总是得到正确的结果

cat somefile
将文件逐字转储到终端。不涉及cat和/或shell的区域设置。终端以任何配置方式显示它(如果您使用的是
屏幕
,它有自己的输入和输出配置,与外壳和终端分开)

我得到bash:warning:setlocale:LC_ALL:无法更改区域设置(ru_ru.iso88595)


这是一条来自Bash的消息,表示将新区域设置应用于当前会话时出现问题。您可能已将区域设置设置为无效值。确保它出现在
locale-a
的输出中,否则它不会安装。

locale不会更改文件内容。另外,您看到的字符取决于终端的设置,而不是区域设置。好的,但是为什么使用编码也像“en_US.UTF-8”或“en_US.iso88595”的区域设置呢?我的意思是,据我所知,区域设置不会更改文件内容,但会更改您将看到的内容,例如,完成
cat./test.txt
。当test.txt由此命令创建且以前不存在时,将使用什么编码?终端编码?如前所述,它将使用命令的编码。如果使用koi8r终端并写入和运行koi8r命令,则数据将被写入koi8r。如果使用UTF-8终端,请将UTF-8命令写入UTF-8文件,然后从koi8r终端运行该文件,它将是UTF-8。