gpt4 book ai didi

bash - 管道和文件重定向的区别 - BASH

转载 作者:行者123 更新时间:2023-11-29 09:39:58 25 4
gpt4 key购买 nike

Redirection 用于重定向stdout/stdin/stderr!例如:ls > log.txt.

管道 用于将一个命令的输出作为另一个命令的输入。例如:ls | grep 文件.txt

为什么这两个运算符(operator)在做同样的事情?

为什么不直接写 ls > grep 来传递输出,这不也是一种重定向吗?

我意识到 Linux 是“做一件事并把它做好”,所以必须有更多我想念的合乎逻辑的原因。

最佳答案

确实需要一个差异化的语法特性 - 使用 >| 就可以了。

如果您在两种场景中都使用了>,您怎么知道

ls > grep

正在尝试写入名为 grep文件 或将输入发送到 grep 命令

grep 可能不是最好的例子,因为您可能会试图通过 grep 的强制参数的存在来消除歧义;但是,(可选)无参数命令确实存在,例如 column
that other guy在注释中提供了另一个示例:test 可能引用测试输出文件standard test command 的无参数调用.


另一种看待它的方式:

您的建议基本上是使用 > 作为通用的 send-output-somewhere 运算符,而不管目标类型(文件还是命令)。

但是,这只会转移消除歧义的需要,然后您必须在指定目标时消除歧义-它是要输出到的文件还是要运行的命令?

考虑到当涉及到简单命令的第一个标记时,shell 还具有隐式消歧功能 - foo [...] 只会调用一个命令 - 在operator 级别进行区分 - > 用于输出到文件,| 用于发送命令 - 是明智的选择。

关于bash - 管道和文件重定向的区别 - BASH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com