Linux Shell 命令行:Shell 展开(Shell Expansion)
命令行中输入一行命令时,执行前将会把每个参数解析成其真实表示的样子。
这称为 外壳展开。
您键入的命令参数通过 echo 命令的帮助在终端里显示其展开的样子,当你想知道您的命令在外壳程序里是如何解析展开时,它特别有用。
命令 | 功能 |
---|---|
set -x | 使外壳程序显示展开细节。 |
set +x | 使外壳程序不显示展开细节。 |
set -x 命令
set -x
命令使外壳程序显示展开细节。
语法:
echo <text>
#终端显示 text 文本
举例:
$ echo $USER
$ echo \$USER
见如上示例截图,set -x 命令使终端显示展开细节。 您可看到外壳程序是如何展开给定的命令行。执行 echo $USER
命令时,$USER 被展开成当前用户名,这里是 'sssit'
当执行 echo \$USER
命令时,由于 $ 符号前有个反斜线 \ ,而反斜线符号 \ 是转义字符,它将使其后跟的 $ 字符表示为 $ 本身的字面含义,而失去其表示变量前缀的含义。因此,原样输出 ‘$USER' 字符串。
set +x 命令
set +x
命令使外壳程序不显示展开细节。
语法:
echo <text>
举例:
$ echo $USER
$ echo \$USER
参见以上示例截图,由于不显示展开细节,输出直接显示到终端。
译注: Linux 系统的 外壳展开(shell expansion) (也被译做 外壳扩展)也是命令行使用者必须了解的课题。这里,简单将其 展开顺序 列示如下,以备参考:
- 大括号展开(Brace Expansion){...}
- 波浪号展开(Tilde Expansion) ~
- 参数展开(Shell Parameter Expansion)${...}
- 命令替换(Command Substitution) $(...) 或 `...`
- 数学计算(Arithmetic Expansion) $((..))
- 进程替换(Process Substitution) <(...) 或 >(...)
- 单词分割(Word Splitting)IFS
- 文件名展开(Filename Expansion)* ? [..] 外壳文件名模式匹配
- 引号去除(Quote Removal)
其中,2 到 6 步骤是同时进行的,无先后序。
推荐文章: