Linux管道 ‘ | ’ 与运算符‘&&’的区别
- 这两者均是shell中的概念
- 简单来说,最根本的区别是:
- | (管道符):用于连接进程,将一个命令的输出作为另一个命令的输入。
- &&(逻辑与运算符):用于连接命令,根据前一个命令的成功与否来决定是否执行后一个命令。
“ | ”——管道符
- 功能:它创建的一个“管道”,将第一个命令(|左边)的标准输出直接作为第二个命令(|右边)的标准输入。
- 数据流:它传递的是数据。
- 执行顺序:管道连接的两个命令是同时启动的。右边的命令会一直等待左边的命令输出数据,并实时处理。
- 关注点:关注的是数据的流动和加工。即把一个命令的结果传递给另一个命令做进一步处理。
- 例子:
grep并不关心ls是否能运行成功,即使目录为空,grep也会处理空输入。# 搜索当前目录下的文件,然后使用grep过滤出包含"report"的文件名 ls -l | grep "report"
“&&”——逻辑与运算符
- 功能:它表示“并且”的逻辑关系。只有当前一个命令运行成功时,后面的命令才会被执行。如果前一个命令失败,后面的命令会被跳过。
- 数据流:它不传递数据,它传递的是命令的“成功”或“失败”的状态。
- 执行顺序:命令是顺序执行的,一个接一个。必须等前一个命令完全结束,才知道下一条命令要不要执行。
- 关注点:关注的是命令的执行状态和流程控制。只有在前一步成功的前提下才能继续下一步。
- 例子:
./my_program的执行完全依赖于前一个命令 make是否成功。# 编译一个程序,如果编译成功(make返回0),才运行它 make && ./my_program