目录
一、逻辑运算符
1. &&
(AND)
含义:只有左侧命令成功(退出码为 0)时才执行右侧命令。
示例:
true && echo "成功" # 输出“成功” false && echo "失败" # 无输出
2. ||
(OR)
含义:只有左侧命令失败(退出码非 0)时才执行右侧命令。
示例:
false || echo "失败" # 输出“失败” true || echo "成功" # 无输出
3. 组合使用:A && B || C
等价于:
(A && B) || C
示例:
false && echo yes || echo fallback # 输出 fallback
二、输出与重定向
1. echo
输出
默认输出到
stdout
(标准输出)输出到
stderr
(标准错误):echo "错误信息" >&2
2. 标准文件描述符(FD)
0
:stdin(标准输入)1
:stdout(标准输出)2
:stderr(标准错误)
3. 重定向操作符
>
:覆盖写入文件>>
:追加写入文件2>
:重定向 stderr(覆盖)2>>
:重定向 stderr(追加)
4. 同时重定向 stdout 和 stderr
POSIX 写法:
command >out.txt 2>&1
Bash 简写:
command &>out.txt
5. 丢弃输出
丢弃 stdout:
command > /dev/null
丢弃 stderr:
command 2> /dev/null
同时丢弃:
command > /dev/null 2>&1 # 或 command &> /dev/null
三、管道 |
默认:只传递
stdout
,不传递stderr
传递两者:
command 2>&1 | grep something # 或(Bash) command |& grep something
四、自定义文件描述符(进阶)
打开 FD 3 并写入:
exec 3>mylog.txt echo "hello" >&3 exec 3>&- # 关闭
五、小结速查
操作 | 说明 | |
---|---|---|
A && B |
A 成功才执行 B | |
A || B |
A 失败才执行 B | |
> file |
覆盖写入 stdout | |
>> file |
追加写入 stdout | |
2> file |
覆盖写入 stderr | |
2>> file |
追加写入 stderr | |
2>&1 |
将 stderr 重定向到 stdout | |
&> file |
同时重定向 stdout 和 stderr(Bash) | |
> /dev/null |
丢弃 stdout | |
2> /dev/null |
丢弃 stderr | |
| | 管道,只传递 stdout | |
2>&1 | 或|& (bash) |
管道传递 stdout 和 stderr |