gpt4 book ai didi

bash - 如何在 bash 中有条件地添加管道元素

转载 作者:行者123 更新时间:2023-12-05 08:30:10 25 4
gpt4 key购买 nike

我需要形成各种命令的管道。管道的某些元素或元素序列仅在满足某些条件时才相关。现在,我可以写:

if [[ $whatever ]]; then
cmd1 | cmd2 | cmd3 | cmd4
else
cmd1 | cmd4
fi

但这意味着重复 cmd1cmd4,另外,可能有几个条件,我不想写嵌套的 if。所以,我试着写这个:

if [[ $whatever ]]; then
pipeline_segment="| cmd2 | cmd3"
else
pipeline_segment=""
fi

cmd1 ${pipeline_segment} | cmd4

但是 - 管道符号未被解释为使用管道的指令。

如何让 bash 执行我也想要的管道?

注意:您可以假定 bash 版本为 4 或更高,但前提是您必须这样做。

最佳答案

你的尝试失败了,因为特殊符号在扩展后失去了它们的语法值(value)。 eval 是一种方式,但我们知道它很容易被代码注入(inject),因此最好避免使用。我们可以试试

cmd1 |
if [ condition ]; then
cmd2 | cmd3
else
cat
fi |
cmd4

虽然我很想跳过cat,但我找不到办法。真实例子:

echo XYZABC |
if true; then
tr Y B | tr Z C
else
cat
fi |
tr X A

输出 ABCABC 并将条件更改为 false 输出 AYZABC

关于bash - 如何在 bash 中有条件地添加管道元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65782810/

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