©
将版权符号和英镑符号£
插入 bash 脚本的正确方法是什么。
我正在使用nano
我的编辑器并运行 Debian Squeeze。
如果我从 Windows 复制并粘贴符号,它可以工作,但它似乎粘贴了nano
无法显示的隐藏字符,因此很难在 shell 脚本中编辑代码。
所以例如我希望能够做到这一点: -
text="£15.00"
text2="© John Doe"
似乎您使用的语言环境不支持这些符号(在过去,它也可能是一种糟糕的字体)。由于您使用的是 UTF-8 字符(Windows 上的默认字符),因此您还需要在 Linux 上的 UTF-8 感知环境中。您可以使用以下locale
命令进行检查:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
所以我的系统很好,但你的系统设置了默认的 ASCII C 语言环境。这些是简单的bash
变量,因此您可以export
单独使用它们或将它们全部覆盖(通过设置LC_ALL
)。但是,这只会影响当前的 shell,所以你需要让它成为 shell 初始化的一部分,以便每次都自动工作。
这通常通过/etc
全局配置文件脚本来完成,但.bash_profile
也.bashrc
可以正常工作。在您的 Debian 版本中,语言环境存储在/etc/default/locale
其中,您可以使用 获取可用选项列表locale -a
,例如:
$ locale -a
C
en_US
en_US.iso88591
en_US.utf8
POSIX
sl_SI.utf8
选择一个带有 utf8 后缀的。如果您需要其他语言环境(例如日语),可以使用 localedef/locale-gen 生成它们(随附glibc
或作为单独的包)。
如果在 nano 中输入符号时遇到问题,请使用转义语法。您可以使用iconv
将其转换为与当前语言环境对应的输出编码:
text=$'\xa315.00'
text2=$'\xa9 John Doe'
iconv -f latin1 <<< $text
iconv -f latin1 <<< $text2
或在 utf8 中相同:
text=$'\xc2\xa315.00'
text2=$'\xc2\xa9 John Doe'
iconv -f utf-8 <<< $text
iconv -f utf-8 <<< $text2
最好将 (C) 用于版权,您希望它在其他语言环境中始终可读,而不是为违规辩护。
显示器看起来像
text="1.00"
text2=" ohn Doe"
在我的测试终端中。