详解Bash命令行处理

豆豆网   技术应用频道   2006年08月11日  【字号: 收藏本文

本文详细介绍详解Bash命令行处理

  前言

  我看很多兄弟写脚本或命令时出现错误的主要原因,是因为不了解bash的命令行处理。我在这里总结了一下,大家可以参考一下。其中也涉及到双引号,单引号以及eval的技巧,我会一一讲述。

  Shell从标准输入或脚本中读取的每行称为一个管道行,它包含一个或多个由0个或多个管道字符(|)分隔的命令。对每一个管道行,进行12个步骤的处理。

  一、bash命令处理的12个步骤;

  +-------------+      单引号
  |------------------------->|       |--------------------------|
  | ----------------------->| 1.分隔成记号|---- ---------------|   |
  | |  ------------------->|       |   双引号    |   |
  | |  |          +-------------+          |   |
  | |  |             ||             |   |
  | |  |读取下一个命令      \/             |   |
  | |  |   +-------------------------------------------+  |   |
  | |  |   |          2.           |  |   |
  | |  ------|       检验第一个记号        |  |   |
  | |     |开放的关键字          其他关键字 |  |   |
  | |     |        非关键字          |  |   |
  | |     +-------------------------------------------+  |   |
  | |               ||             |   |
  | |               \/             |   |
  | |      +-----------------------------+        |   |
  | | 扩展别名 |      3. 检验第一个记号 |        |   |
  | |------------| 别名            |        |   |
  |        |       不是别名    |        |   |
  |        +-----------------------------+        |   |
  |                 ||             |   |
  |                 \/             |   |
  |              +--------------+         |   |
  |              | 4.大括号扩展 |         |   |
  |              +--------------+         |   |
  |                 ||             |   |
  |                 \/             |   |
  |              +--------------+         |   |
  |              | 5.~符号扩展 |         |   |
  |              +--------------+         |   |
  |                 ||             |   |
  |                 \/             |   |
  |              +--------------+    双引号   |   |
  |              | 6.参数扩展 |<-----------------|   |
  |              +--------------+            |
  |                 ||                |
  |                 \/                |
  |          +------------------------------+        |
  |          | 7.命令替换(嵌套命令行处理) |        |
  |          +------------------------------+        |
  |                 ||                |
  |                 \/                |
  |              +--------------+   双引号      |
  |              | 8.算术扩展 |------------------|   |
  |              +--------------+         |   |
  |                 ||             |   |
  |                 \/             |   |
  |              +--------------+         |   |
  |              | 9.单词分割 |         |   |
  |              +--------------+         |   |
  |                 ||             |   |
  |                 \/             |   |
  |              +--------------+         |   |
  |              | 10.路径名扩展|         |   |
  |              +--------------+         |   |
  |                 ||             |   |
  |                 \/             |   |
  |        +----------------------------------------+  |   |
  |        | 11.命令查寻:函数,内置命令,可执行文件|<---|-----|
  |        +----------------------------------------+
  |                 ||
  |                 \/
  |将参数带入下一个命令    +-------------+
  |----------eval--------------| 12.运行命令 |
                 +-------------+

  结合上面的插图,这里给出命令行的12个步骤。

来源:LinuxSir.Org    作者:home_king    责编:豆豆技术应用

正在加载评论...