Linux Shell 命令行:Shell 展开(Shell Expansion) 0 个改进

命令行中输入一行命令时,执行前将会把每个参数解析成其真实表示的样子。

这称为 外壳展开

您键入的命令参数通过 echo 命令的帮助在终端里显示其展开的样子,当你想知道您的命令在外壳程序里是如何解析展开时,它特别有用。

命令 功能
set -x 使外壳程序显示展开细节。
set +x 使外壳程序不显示展开细节。

set -x 命令

set -x 命令使外壳程序显示展开细节。

语法:

echo <text>  
#终端显示 text 文本

举例:

$ echo $USER  
$ echo \$USER  

Linux Shell Expansion Displaying1

见如上示例截图,set -x 命令使终端显示展开细节。 您可看到外壳程序是如何展开给定的命令行。执行 echo $USER 命令时,$USER 被展开成当前用户名,这里是 'sssit'

当执行 echo \$USER 命令时,由于 $ 符号前有个反斜线 \ ,而反斜线符号 \ 是转义字符,它将使其后跟的 $ 字符表示为 $ 本身的字面含义,而失去其表示变量前缀的含义。因此,原样输出 ‘$USER' 字符串。

set +x 命令

set +x 命令使外壳程序不显示展开细节。

语法:

echo <text>  

举例:

$ echo $USER  
$ echo \$USER  

Linux Shell Expansion Displaying2

参见以上示例截图,由于不显示展开细节,输出直接显示到终端。

译注: Linux 系统的 外壳展开(shell expansion) (也被译做 外壳扩展)也是命令行使用者必须了解的课题。这里,简单将其 展开顺序 列示如下,以备参考:

  1. 大括号展开(Brace Expansion){...}
  2. 波浪号展开(Tilde Expansion) ~
  3. 参数展开(Shell Parameter Expansion)${...}
  4. 命令替换(Command Substitution) $(...)`...`
  5. 数学计算(Arithmetic Expansion) $((..))
  6. 进程替换(Process Substitution) <(...)>(...)
  7. 单词分割(Word Splitting)IFS
  8. 文件名展开(Filename Expansion)* ? [..] 外壳文件名模式匹配
  9. 引号去除(Quote Removal)

其中,2 到 6 步骤是同时进行的,无先后序。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!