【问题标题】:Terminal (bash) - mkdir from read input string终端 (bash) - 来自读取输入字符串的 mkdir
【发布时间】:2017-01-23 17:35:48
【问题描述】:

我在 OSX 中使用终端 (bash) 并尝试创建一个可执行脚本,该脚本将从输入创建一个目录,但是在输入带有空格的字符串时遇到问题(我需要空格)。

例如在下面的代码中输入“新建文件夹”时,当然会创建“新建”和“文件夹”两个文件夹。

read dName; mkdir $dName

但是使用下面的代码,出于某种原因,我得到了一个名为:“%80%9D”的文件夹

read dName; mkdir "$dName"

如果我将第二个代码放入终端而不使用可执行脚本,它就可以工作。我不知道为什么使用可执行脚本来运行它会给我“%80%9D 而不是文件夹名称。如果可能,请提供帮助。

【问题讨论】:

  • 您确定在代码中使用常规 ASCII 引号,还是使用大引号?右花引号 恰好有 E2 80 9D 作为其 UTF-8 编码。

标签: bash macos input terminal mkdir


【解决方案1】:

您在脚本中使用了大引号,而不是常规的 ASCII 引号。您的脚本是 UTF-8 编码的,这意味着 mkdir 的参数存储为以下字节流:

  • e2 80 9c - 左花引号
  • 24 64 4e 61 6d 65 - $dbash
  • e2 80 9d - 右花引号

但是,当脚本运行时,这些字节似乎是使用 ISO-Latin-1 解释的。由于e2 是标识符名称的有效字节,并且大括号实际上并未转义任何内容,因此bash$dBash%E2 视为单个未定义变量的扩展,该变量扩展为空字符串。因此,mkdir 接收 %e2%80%9c%90%9d 作为其参数。创建请求的文件名。列出目录时,前三个字节再次解释为 UTF-8 以显示左花引号,但其余两个没有解释并按原样显示。

【讨论】:

  • 带回家的信息:用 text 编辑器编辑代码,而不是文字处理器。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2014-03-26
  • 2013-08-03
  • 1970-01-01
  • 2018-05-20
  • 2020-08-24
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多