4.4 将一个命令的输出插入到另一个命令

$()

命令替换(command substitution)是接受一个命令的输出,并将它插入到另一个命令中,好像你直接手工输入这一输出的内容一样。用$()将最初运行的命令括起来(这个命令将产生要被插入的输出内容)。通过下面的例子可以说得更明白些。

假设你刚参加完一个家庭聚餐,将你的数码相机连到Linux计算机,把新照片复制出来,把它们放到一个以当天日期来命名的文件夹中。

  1. $ pwd
  2. /home/scott/photos/family
  3. $ ls -1F
  4. 2005-11-01/
  5. 2005-11-09/
  6. 2005-11-15/
  7. $ date “+%Y-%m-%d
  8. 2005-11-24
  9. $ mkdir $(date “+%Y-%m-%d”)
  10. $ ls -1F
  11. 2005-11-01/
  12. 2005-11-09/
  13. 2005-11-15/
  14. 2005-11-24/

在这个例子中,首先运行的是date "+%Y-%m-%d",然后mkdir用这个命令的输出(2005-11-24)来作为新目录的名称。这是个强大的功能,当你阅读其他人编写的shell脚本时(Web上很容易找到这些脚本),会发现到处都在用命令替换。

说明 过去曾经建议用单撇号(`)将最初的命令括起来,单撇号字符位于键盘的左上方。不过,现在最好还是使用本节采用的字符 $()