+ -
当前位置:首页 → 问答吧 → 这个问题比较水,写一个脚本接收管道的输出

这个问题比较水,写一个脚本接收管道的输出

时间:2011-05-16

来源:互联网

我一般写脚本都是后面接管道进行处理
今天突然想到好像一直没有写过脚本或者函数接受管道的输出,一下卡壳了。。。

当然函数里面直接这样是可以的,
  1. function a{
  2. grep root | awk -F: '{print $NF}'
  3. }
  4. cat /etc/passwd | a
复制代码
如果我想写个接收管道输出保存到变量里,然后进行一系列操作之后再输出的函数呢。。。能不能给举个例子,是要用read吗?

作者: minora   发布时间: 2011-05-16

回复 minora


   
    a () {
        while read line;do
              echo $line
              echo $line| grep a | awk -F: '{print $NF}'
        done
    }
    cat /etc/passwd | a

作者: shplpy   发布时间: 2011-05-16

呃,多谢。。。今天太腿了= =

作者: minora   发布时间: 2011-05-16

回复 shplpy


    请问怎么能不忽略空格呢?比如某一行开头有空格

作者: minora   发布时间: 2011-05-16

回复 minora


   没明白你的意思啊

作者: shplpy   发布时间: 2011-05-16

回复 shplpy


   
你这样read的话,文件某一行第一个字符是空格,输出的结果就和源文件不一样了,我想保留那个空格

比如
AAA
BBB
CCCCC

作者: minora   发布时间: 2011-05-16

回复 minora


    那就再把空格加回去……

作者: xiaopan3322   发布时间: 2011-05-16



QUOTE:
回复  shplpy


   
你这样read的话,文件某一行第一个字符是空格,输出的结果就和源文件不一样了,我 ...
minora 发表于 2011-05-16 21:46



    read是以$IFS指定的字符做分隔的,默认的是空格、tab和换行,在read执行前预置一下$IFS。
    在while read line;do前加上一行export IFS='\n'即可

作者: shplpy   发布时间: 2011-05-16

回复 shplpy

哦,多谢
再多问一句,这些环境变量在哪可以查看到?怎么全部读取

作者: minora   发布时间: 2011-05-16

回复 minora

IFS    The  Internal  Field  Separator that is used for word splitting after expansion and to split lines
              into words with the read builtin command.  The default value is ‘‘<space><tab><newline>’’.
  1. man bash  
  2. search IFS
复制代码

作者: shplpy   发布时间: 2011-05-16