如何在 Bash 中根据条件进行管道传输

szy*_*bia 6 bash scripting pipe

我把问题过于复杂化了,但是在 Bash 中的一行给出条件的情况下,有没有一种方法可以将一个命令通过管道传输到另一个命令中?

基本上我目前有这个

if [ "$check" -eq 1 ]; then
    echo -n "foo" | xclip -selection clipboard
else
    echo -n "foo"
fi
Run Code Online (Sandbox Code Playgroud)

我想知道 Bash 中是否有将其变成如下所示的内容:

echo -n "foo" && [ "$check" -eq 1 ] | xclip -selection clipboard
Run Code Online (Sandbox Code Playgroud)

如果 $check == 1,“foo”将通过管道传输到剪贴板,否则内容将输出到 stdout,并且管道永远不会激活,并且不会将任何内容写入剪贴板。我希望这是一句单行话,我只调用一次 echo 。

Ed *_*ton 8

$ check=0
$ echo "foo" | { if (( check == 1 )); then cat -n; else cat -; fi; }
foo

$ check=1
$ echo "foo" | { if (( check == 1 )); then cat -n; else cat -; fi; }
     1  foo
Run Code Online (Sandbox Code Playgroud)

  • 不客气。无论所讨论的命令是“clipboard”、“cat -n”还是其他接受管道输入的命令,对于如何有条件地通过管道传输到命令的问题并不重要,而且并不是每个人的系统上都有“clipboard”,因此使用对于这个论坛的读者来说,这个例子中的“cat -n”比使用“clipboard”更有用,因为每个人都可以复制/粘贴我的答案来尝试。 (5认同)