shell中命令之间数据的传递

1.管道 "|"

   ls | cat -n > out.txt

2. 子shell

  2.1 子shell 说明

    在shell脚本中可以用()操作符可以定义一个子shell   

#/bin/bash
pwd
(cd / ; ls)
pwd

  执行结果

  

  说明: 当命令在子shell中执行的时候不会对当前shell有任何影响

  2.2 获取子shell 中的数据

    cmd_output=$(COMMANDS)

    out=$(ls -l | cat -n)

#!/bin/bash
out=$(ls -l | cat -n)
echo $out

  输出结果:

  

  问题所在: 行和行之间的回车键没了。这显然是我们不想要的结果

  解决办法:将子shell的结果放入双引号中,保留换行符

  

#!/bin/bash
out=$(ls -l | cat -n)
echo $out
out="$(ls -l | cat -n)"
echo $out

  执行结果:

  

  什么鬼!!!居然没有变化。 难道书上写错啦!!

  最后在网上找到了问题的答案: IFS(内部域分隔符)

  IFS详情: http://www.2cto.com/os/201504/394478.html

  将IFS设置成"\n"换行符就可以了,只是在外边加上引号的这种做法是不对的

  

#!/bin/bash
out=$(ls -l | cat -n)
echo $out
IFS="\n"
out=$(ls -l | cat -n)
echo $out

  

3. 反引用(与单引号可不是一回事)

  out.txt=·ls | cat -n·

  其它操作与子shell相同

posted @ 2016-04-23 10:34  Amei1314  阅读(1288)  评论(0编辑  收藏  举报