Bash 转义/扩展命令

标签 bash

我对 Bash 还很陌生,我无法弄清楚我的输入在解释时发生了什么。具体来说,当转义相对于其他扩展步骤发生时。

根据我的阅读,bash 执行以下操作(按顺序):

  • 大括号扩展
  • 波形符扩展
  • 参数和变量扩展
  • 命令替换
  • 算术扩展
  • 分词
  • 文件名扩展

但是此列表不包括何时转换所有转义序列,例如'\\' 转化为它们的含义,例如'\'。也就是说,如果我想打印一个反斜杠字符。运行的命令是

echo \\

不是

echo \

因此反斜杠字符的语义所需的语法是两个反斜杠。这必须在内部转换为单斜杠表示形式。

正如我通过一个小型测试程序发现的那样,这似乎是命令替换之前的某个时间。

所以,我的问题是:这一步什么时候发生? (或者 bash 解释循环的完整列表将是完美的)

此外,解释器中还有其他可能让我困惑的微妙之处吗? (我猜与了解完整列表有关)

最佳答案

来自手册页的“扩展”部分,位于“重定向”部分之前。

Quote Removal

After the preceding expansions, all unquoted occurrences of the characters \, ', and " that did not result from one of the above expansions are removed.

引用删除是您列出的七个扩展之后的最后一个过程。

关于Bash 转义/扩展命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33891017/

相关文章:

c++ - 使用 system() 在 C++ 程序中读取行后删除行

linux - 计算多行中某个字段的出现次数

python - 进程组中的所有 child 并不总是看到信号

linux - 空 Bash 行抛出错误

bash - 替换多个 block 中特定模式之间的任何字符

bash - unix shell 脚本,用于将文件按固定增量按顺序移动到目录中

bash - 为什么我一直收到 `bash: local: command not found`

linux - 如何用 bash 脚本四舍五入小数值?

linux - 自动化 bash 脚本

linux - gnome-terminal:如何关闭原始选项卡?