命令的传递
前言:
 Unix shell脚本最棒的特性之一就是可以轻松地将多个命令组合起来生成输出。一个命令的输出可以作为另一个命令的输入,而这个命令的输出又会传递至下一个命令,以此类推。这种命令组合的输出可以被存储在变量中。这则攻略将演示如何组合多个命令并读取其输出。
 命令输入通常来自于stdin或参数。输出可以发送给stdout或stderr。当我们组合多个命令时,通常将stdin用于输入,stdout用于输出。
 在这种情况下,这些命令被称为过滤器(filter)。我们使用管道(pipe)连接每个过滤器,管道操作符是|。(特定的一些指令才能作为过滤器:例如ls/grep/awk/sed/cat等等)例如:
$ cmd1 | cmd2 | cmd3
这里我们组合了3个命令。cmd1的输出传递给cmd2,cmd2的输出传递给cmd3,最终的输出(来自cmd3)会出现在显示器中或被导入某个文件。
示例:
组合命令:
$ ls | cat -n > out.txt
命令的值赋予给变量:
这种方法叫作子shell法。例如:
cmd_output=$(ls | cat -n)
echo $cmd_output
另一种方法叫作反引用(有些人也称它为反标记),也可以用于存储命令输出:
cmd_output=`COMMANDS`
例如:
cmd_output=`ls | cat -n`
echo $cmd_output
反引用与单引号可不是一回事,该字符位于键盘的 ~ 键上
补充内容:利用子shell生成独立的程序!(在命令当中执行子shell时不会对当前shell造成影响,当用cd命令改变子shell的当前目录时,这种变化不会反映到主shell环境中。
子shell本身就是独立的进程。可以使用()操作符来定义一个子shell!(可以用在shell脚本中)
$> pwd
/
$> (cd /bin; ls)
awk bash cat...
$> pwd
/
假设我们使用子shell或反引用的方法将命令的输出保存到变量中,为了保留输出的空格和换行符(\n),必须使用双引号。例如:
$ cat text.txt
1
2
3
$ out=$(cat text.txt)
$ echo $out
1 2 3 # 丢失了1、2、3中的\n
$ out="$(cat text.txt)"
$ echo $out
1
2
3

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号