![使用嵌套管道命令编写 bash 条件](https://linux22.com/image/1174751/%E4%BD%BF%E7%94%A8%E5%B5%8C%E5%A5%97%E7%AE%A1%E9%81%93%E5%91%BD%E4%BB%A4%E7%BC%96%E5%86%99%20bash%20%E6%9D%A1%E4%BB%B6.png)
以下 bash 命令:
aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l
印刷:
0
我想要的是,当结果确实为 0 时,将 FAILURE 打印到终端。
这是我尝试过的:
if [ aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l = 0]; then echo FAILURE; fi
但什么都没有打印。它看起来正在等待更多输入。
答案1
你应该使用命令替换:
if [ $(aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l) -eq 0 ]
then
echo FAILURE;
fi
或者在一行中:
if [ $(aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l) -eq 0 ]; then echo FAILURE; fi
更好的解决方案是“@steeldriver”建议使用 grep 的退出状态:
if aws s3 ls s3://bucket/dir | grep -q _SUCCESS; then echo FAILURE; fi
或者:
aws s3 ls s3://bucket/dir | grep -q _SUCCESS || echo FAILURE