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放到同一句才能显示内容。

大家语法上按照下一段来理解,执行时按上一段代码来执行。

运行效果

img


例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"

img


3 管道命令的要求

大多数命令都不支持管道操作(指|后的命令)。

支持的命令查看帮助文件可以看到支持Standard input。

查看grep帮助

man grep

img

查看read帮助

man read

img


4 常见问题

FAQ1:管道符属于输入还是输出的技术?

输出命令的结果作为输入命令的输入,所以同属于两者。


FAQ2:管道用法与重定向的用法比较?

管道: |

重定向:>,>> ,>>>,1>,等。

要实现功能两者都能实现,强弱相同,喜欢不喜欢的问题。

管道支持追加式嵌套(套娃),写法与思维方式接近,写起来与看起来感觉简单点(如果习惯的话)。