【问题标题】:Why do ksh88 and ksh93 allow unclosed backticks?为什么 ksh88 和 ksh93 允许未闭合的反引号?
【发布时间】:2015-01-30 19:54:30
【问题描述】:

我有一个问题。

我不明白为什么我打字的时候:

echo "`date -d 20121231 +"%B

它执行没有错误:

December

为什么打开时执行成功

`

到底是不是关闭了? 它适用于 Korn Shell 88 和 93。

【问题讨论】:

  • 你用的是什么外壳?
  • 这在bash(三个不同的版本)、bash-as-sh 或csh 对我来说不能正确执行。
  • 当单词/行出于某种原因结束时,ksh 似乎会自动关闭反引号。 echo "`d"ate 也有效,但 echo `"d"ate 等待结束反引号。
  • 这与echo 无关——它与任何其他命令的行为方式相同;除了(官方的,由 David-Korn 编写的)ksh 实现之外,它也与任何 UNIX shell 无关。适当地编辑标题。
  • 只是添加到列表中,这在pdksh 中不起作用。

标签: shell unix ksh


【解决方案1】:

这是(如果有意的话)大卫·科恩(David Korn)做出的决定。

没有外力造成的这种行为的要求——没有向后兼容的要求;没有符合标准的原因(就此而言,当 ksh88 出现时,POSIX sh 尚未标准化)。

唯一能给出明确答案的人是这些 shell 的作者。

【讨论】:

  • 这具有ksh 实现中错误的所有特征;我在手册页中找不到对此行为的任何引用,而其他示例(例如 echo "xecho `ls 的行为与预期一样)。其他ksh 版本pdkshmksh 也没有这种行为)。
  • 错误?无证行为?再说一次,只有一个人可以说,很可能他不在这里。也就是说,你说得对,很可能存在错误,我已经适当地修改了我的措辞。
  • 这并非不可能是故意的,但在我看来,错误的可能性比这种奇怪且不一致的行为是故意的,sh_lex 中的解析是一个 1200 个函数,最多有 8 层嵌套。难免有些bug……顺便把题名编辑了,还不如“未封闭的反引号”那么简单; " 在反引号之前开始,并在 命令结束之前关闭...无论如何这都是错误的,这 可能是 sh_lex()不知何故弄糊涂了……
猜你喜欢
  • 2017-12-10
  • 2021-07-02
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多