Shell 管道符
1 回顾
前面我们介绍了输入的2种位置:键盘、文件;
从键盘输入
read -p "input name:" name
从文件获取输入
read -p "input name:" name < data1.txt
本节学习输入的第3种位置:命令的输出。
2 基本运用
输出命令 | 要求输入的命令
输出命令的输出结果会作为输入命令的输入。
| 称为管道符,后面的命令也称为管道命令。
例1:echo命令的输出结果作为read的输入。
echo "xt" | (read name ; echo $name)
大家疑惑为什么不写下面这段,跟语法匹配啊?
echo "xt" | read name
echo $name
我也想啊…,但因为 | 开启子进程的原因,外部读不到|后的变量;echo$name放到同一句才能显示内容。
大家语法上按照下一段来理解,执行时按上一段代码来执行。
运行效果
例2:套娃,例1的结果继续作为read的输入。
echo xt | (read name ; echo "hi,$name")| (read name ; echo "hi,$name")
输出内容为
hi,hi,xt
|的优点,套娃方便,继续往后加。
例3:grep支持管道
cat grep1.data | grep "1" | grep "2"
3 管道命令的要求
大多数命令都不支持管道操作(指|后的命令)。
支持的命令查看帮助文件可以看到支持Standard input。
查看grep帮助
man grep
查看read帮助
man read
4 常见问题
FAQ1:管道符属于输入还是输出的技术?
输出命令的结果作为输入命令的输入,所以同属于两者。
FAQ2:管道用法与重定向的用法比较?
管道: |
重定向:>,>> ,>>>,1>,等。
要实现功能两者都能实现,强弱相同,喜欢不喜欢的问题。
管道支持追加式嵌套(套娃),写法与思维方式接近,写起来与看起来感觉简单点(如果习惯的话)。