【问题标题】:echo unicode character as utf8 from file从文件中将 unicode 字符作为 utf8 回显
【发布时间】:2021-03-13 04:02:57
【问题描述】:

当我在终端中运行echo "\U0041" 时,我得到“A”。

但是,当我从文件中运行 echo "\U0041" 时,说 example.sh 然后运行它。

bash ./example.shsh ./example.sh

我得到了文字 \U0041

为什么?如何从文件中回显/打印“A”。


更新

  • "$SHELL" --version -> zsh 5.8 (x86_64-apple-darwin20.0)
  • 我使用 brew 将 bash 升级到 bash-5.1。
  • 当我在文件中运行 echo $'\u0041' 时,我确实看到了“A”

我现在的问题是,当我似乎只能用单引号打印 uf8,但变量需要双引号时,我如何让十六进制代码成为变量?

HEX='0041'
echo $"\u$HEX"

打印:\u0041

【问题讨论】:

  • 那是哪个版本的 Bash? Interactive Bash 5.1.4 只打印“\U0041”。
  • 我正在使用 bash-3.2 运行新的 2020 mac
  • 交互式终端不是zsh
  • "$SHELL" --version 在您的交互式 shell 中报告什么?
  • zsh 5.8 (x86_64-apple-darwin20.0)

标签: bash macos shell unicode


【解决方案1】:

您在终端中使用zsh 作为外壳。它的echo 版本可以理解\uXXXX 转义。现代版本的bash 内置的echo 也是如此(如果使用echo -e 或启用xdg_echo shell 选项),但Mac OS 附带的旧版本太旧了,无法使用。

【讨论】:

    【解决方案2】:

    echo $'\u0041'Bash 4.2 onwards 中打印“A”。 ($'' 从 Bash 2.0 开始可用。)看起来您可能正在 Bash 3.2 和更新的交互式 shell 中运行脚本。

    【讨论】:

    • 我也在尝试记录一个变量echo $"\u$hex"这可能吗?
    • 更新了上面的问题。
    【解决方案3】:

    我在这方面得到了一些帮助,但我的问题的完整解决方案是:

    1. 使用自制软件 brew install bash 更新 bash
    2. 在文件中使用echo -eprintf
    HEX='0041'
    echo -e "\u$HEX"
    
    1. 使用bash 而非sh 运行。
    $ bash ./example.sh
    A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2015-07-11
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多