我想计算管道中的行数,然后根据结果继续管道。
我试过了
x=$(printf 'faa\nbor\nbaz\n' \
| tee /dev/stderr | wc -l) 2>&1 \
| if [[ $x -ge 2 ]]; then
grep a
else
grep b
fi
但它根本不过滤(“a”和“b”都没有)。这是非常出乎意料的,因为至少这些工作符合预期:
printf 'faa\nbor\nbaz\n' | if true; then grep a; else grep b; fi
printf 'faa\nbor\nbaz\n' | if false; then grep a; else grep b; fi
似乎我无法从命令替换内部重定向标准错误,因为这也不起作用(在 bash 中)。它打印所有三行:
x=$(printf 'faa\nbor\nbaz\n' | tee /dev/stderr | wc -l) 2>&1 | grep a
在 zsh 中它只打印两行。
但是在两个 shell 中,变量 x 在管道之后都没有设置,甚至在管道的后半部分也没有设置。
我该怎么做才能计算管道中的行数,然后根据该数字采取行动?我想避免使用临时文件。