1.12 读取命令序列输出

    所谓命令序列就是指 一个命令的输出作为 另一个命令的输入 这样的多个命令序列组合起来。最后可以把命令序列的输出重定向到文件中,或保存到一个变量中。

    将命令序列输出保存到变量中有两种方法:

        1、子shell

            var=$(COMMANDS)

        2、反引用

            var=`COMMANDS`   命令用反引号 引起来

    子shell是一个独立的进程,命令在子shell中执行时,对当前shell没有影响,所有的改变仅限于子shell中。如下面的例子中,进入到子shell中执行ls命令,可发现当前shell的目录路径没有变化。

    [root@localhost ~]# mkdir -p test1/test2    
    [root@localhost ~]# pwd;(cd test1;ls);pwd
    /root
    test2
    /root

书上说通过子shell或反引用输出到变量中内容会自动去掉空格和换行符,但是在centos6上试验了一下,并没有出现这种情况,如下:    

    [root@localhost ~]# cat a
    1
    2
    3
    
    [root@localhost ~]# var=$(cat a)
    [root@localhost ~]# echo $var
    1
    2
    3
按书上说打印var变量时显示格式应该为 1  2  3  这里并没有出现这种情况,如果出现这种情况,可在子shell命令两边加双引号,如下列命令 [root@localhost ~]# var="$(cat a)"

1.13 read命令

    read var   读取输入的字符存入var变量

    read -n num var  读取num个输入的字符存入var变量

    read -p "提示符"  var   显示提示信息,并将输入的字符存入var变量中。var和其前面的"一定要有空格

    read -t num var  在num秒内读取输入的字符存入var变量中。输入完字符一定要敲回车键,否则会认为没有输入

    read -d delim_char var 遇到定界符delim_char时结束输入并将定界符前的 输入存入变量var中。

    read var1 var2 var3    从输入到第一个空格间的字符存入var1中,第一个空格到第二个空格的存入var2中,剩下的所有存入var3中 



    以不回显的方式读取字符并存入变量:

        read -s var   下面是与-p结合使用可以打印提示

    [root@localhost ~]# read -p "Enter passwd:" -s var;echo;echo passwd is $var    
    Enter passwd:
    passwd is qa1
    其中中间有个单独的echo语句是为了换行使用。
    
    [root@localhost]# stty -echo;read -p "Enter:" var;stty echo;echo;echo passwd is $var
    Enter:
    passwd is qa1
    这是第二种方法,stty -echo 禁止将输出发送到终端,stty echo则是允许发送

1.14 字段分隔符

    IFS  内部字段分隔符,默认以空白字符作为字段分隔符(空白字符包括:换行、制表、空格)


    格式 IFS "delim_char"      使用以delim_char作为字段分隔符

     使用方式如下,指定分隔符时加不加""都行

    [root@localhost ~]# IFS=:;var=hello:world;echo $var    
    hello world
    [root@localhost ~]# IFS=",";var=hello,world;echo $var
    hello world


read命令参考http://man.linuxde.net/read