首页 > 代码库 > 管道输出到read中遇到的问题
管道输出到read中遇到的问题
1. 管道输出到read命令中, 使用管道echo输出来设置变量将会失败. 然而, 使用管道cat输出看起来能够正常运行. cat file1 file2 | while read line
2 .while被放置在子shell中。
1 #!/bin/sh2 # readpipe.sh3 # Bjon Eriksson .45 last="(null)"6 cat $0 |7 while read line8 do9 echo "{$line}"10 last=$line11 done12 printf "\nAll done, last:$last\n"1314 exit 0 # 代码结束.15 # 下边是脚本的(部分)输出.16 # ‘echo‘出了多余的大括号.1718 #############################################1920 ./readpipe.sh 2122 {#!/bin/sh}23 {last="(null)"}24 {cat $0 |}25 {while read line}26 {do}27 {echo "{$line}"}28 {last=$line}29 {done}30 {printf "nAll done, last:$lastn"}313233 All done, last:(null)3435 变量(last)被设置在子shell中, 并没有被设置在外边. 在许多Linux发行版上, gendiff脚本通常都在/usr/bin下, 将find的输出通过管道传到while read结构中.1 find $1 \( -name "*$2" -o -name ".*$2" \) -print |2 while read f; do3 . . .
3. 例外,在pipe中的一个大括号中的代码段可能运行在一个 子shell中 。
ls | { read firstline; read secondline; } echo "First line is $firstline; second line is $secondline" # 不能工作
4. 引用还可以改掉echo‘s不换行的"毛病".
bash$ echo $(ls -l)total 8 -rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh -rw-rw-r-- 1 bozo bozo 78 Aug 21 12:57 t71.shbash$ echo "$(ls -l)"total 8-rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh-rw-rw-r-- 1 bozo bozo 78 Aug 21 12:57 t71.sh
管道输出到read中遇到的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。