【问题标题】:Why does this unix shell code work like this? [closed]为什么这个 unix shell 代码会这样工作? [关闭]
【发布时间】:2013-07-28 18:41:35
【问题描述】:

我有一个 bash 脚本,其中包含如下一行:

echo 2 * 3 > 5 is a valid inequality

我试图理解为什么在echo 发送到屏幕后没有得到输出。

相反,nothing 被输出到屏幕上,并且有一个名为 5 的新文件,其中包含 2、我当前目录中所有文件的名称,以及字符串3 is a valid inequality

为什么会这样?有人可以解释吗?顺便说一下,我是在 Linux 系统上运行的。

【问题讨论】:

  • 我建议您在尝试使用 shell 之前阅读手册。一个人不会仅仅因为“我不知道我不应该”而用电锯刮胡子……
  • 为自己说话,@H2CO3。我更喜欢生活在边缘。可以这么说。
  • 知道了。创建了一些文件,如 2xyz、2abc。该代码将名称为 2> 类型的所有文件名以及数字 3 放入(使用 >)一个(自动创建的)名为 5 的文件中。它还将字符串 - “是一个有效的不等式”添加到文件 5.
  • @MichaelPetrotta - 减少惩罚怎么样。 +1 也许是为了减轻打击?
  • @H2CO3 - 减少惩罚怎么样。 +1 也许是为了减轻打击?

标签: linux bash unix


【解决方案1】:

shell 首先处理像> 5 这样的输入/输出重定向,并将相关的文件句柄附加到它打开的文件(在本例中为5)。

它还将* 扩展为当前目录中的匹配文件。所以你最终得到的是:

echo 2 <<ALL YOUR FILES>> is a valid inequality

将输出发送到您之前打开的文件的位置。

如果你想输出文字字符串,你需要告诉shell不要做它的正常解释:

echo '2 * 3 > 5 is a valid inequality'

【讨论】:

  • 等等什么?为什么投反对票?这个答案绝对正确!
  • 知道了。创建了一些文件,如 2xyz、2abc。该代码将名称为 2> 类型的所有文件名以及数字 3 放入(使用 >)一个(自动创建的)名为 5 的文件中。它还将字符串 - “是一个有效的不等式”添加到文件 5.
【解决方案2】:

&gt; 正在重定向标准输出。

* 扩展为所有(非隐藏)文件名

阅读advanced bash scripting guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多