Wetts's blog

Stay Hungry, Stay Foolish.

0%

管道和重定向

  • | :UNIX管道:将一个命令的标准输出作为另一个命令的标准输入。
  • > 是重定向,不仅可以是标准输出strout,还可以是标准错误输出strerr

管道与重定向的区别:

  1. 左边是有stdout(标准输出)的命令 | 右边是能够接受stdin(标准输入)的命令。左边是有输出的命令 > 右边只能是文件,左边是能接受输入的命令 < 右边只能是文件。
  2. 管道执行时,触发了两个进程,分别执行左右两边的命令。重定向是在一个进程中完成的。

ls $(pwd) 和 pwd | ls 效果相同
$()中的命令将在子shell中执行-也就是说,系统将产生一个新的shell实例,计算命令的值,关闭自shell并将结果返回到最初shell中。

如果设置了特殊的环境条件,这些条件可能不会转移到子shell中(例如手动设置的path),那么子shell可能不会继承这些条件。在这种情况下,命令将无效。

除了使用$()结构以外,还可以使用反引号。例如:ls `pwd`

实现与上述完全相同的功能。另一种方法就是使用花括号,例如:ls ${pwd}

两者的不同之处在于花括号中的命令在当前shell中执行,而不需要产生子shell(花括号并不是在所有的Unix版本中都有效)