Bash:美元括号中的两个命令没有相同的行为

Doc*_*luz 2 linux shell bash command

我不明白为什么,在 Bash 中:

  • echo $(hostname --fqdn) 作品,
  • echo $(id -un)没有(id: –un: No such user)。

反引号给出相同的结果。

使用这种表示法有什么好的做法吗?id 命令以这种方式使用它有什么特别之处吗?

下面,一些细节似乎适用于其他系统:

  • lsb_release -a:SUSE Linux Enterprise Server 11 (x86_64),
  • which id: /usr/bin/id,
  • id -un 单独工作。

Dub*_*ubu 5

我注意到发布的命令之间存在细微差别:

echo $(id -un)

以及它的错误消息:

id: –un: No such user

两个“连字符”是不同的,第二个稍微长一点。看起来错误消息是从原始消息复制粘贴的,但命令是重新输入的。原始命令很可能包含错误类型的连字符。这解释了为什么没有人能够重现错误消息。

这种错误主要有两个原因之一:

  • 代码是从网站上复制的,在那里使用错误的格式化程序/语法高亮器进行排版。

  • 代码是在不适当的编辑环境中键入的,例如 Microsoft Word。Word 可能会将您键入的内容更改为更好的排版,但会出现意想不到的变体,例如不同的连字符、不同的引号或其他一些空格符号。


巧合的是,在Codegolf上刚刚有一个人气竞赛挑战,其中一个答案使用了类似的“技巧”来产生甚至不可见的差异:https : //codegolf.stackexchange.com/a/23258/16287

  • `代码是在不合适的编辑环境中输入的,例如 Microsoft Word。` 实际上,大多数基于 Windows 的文本编辑器也有这个问题(至少使用错误的连字符)。我什至遇到过从 PowerShell 复制意大利面的情况,所以它似乎比任何编辑器都更像是 Windows 平台的东西。 (2认同)