Bash 脚本变量放置

Bash 脚本变量放置

我开始学习 Bash 脚本并且正在使用Bash 脚本编写教程

那里说

在 Bash 解释(或运行)脚本的每一行之前首先检查是否存在任何变量名称。对于它识别的每个变量,它都会用它的值替换变量名称。然后它运行该行代码并在下一行再次开始该过程。

那么 Bash 是否首先运行整个脚本来查找变量呢?我不确定这是否是作者试图说的,但如果是的话,我想这是不正确的?

当我执行时:

#!/bin/bash


echo "hello $USERR"



USERR=John

我得到hello结果。

如果我运行:

#!/bin/bash


USERR=John

echo "hello $USERR"

然后我得到hello John结果。

答案1

那么 Bash 是否首先运行整个脚本来查找变量呢?

没有。正如您在示例中发现的那样,Bash 脚本是从上到下执行的。

一个好的做法是在脚本顶部定义所需的所有变量。

答案2

这是一种非常草率的说法,shell 会扫描每个命令的扩展,例如例如变量(还有命令替换等)

文本可以被解释为暗示 shell 读取整个脚本并在执行前在每一行查找变量。事实并非如此。它按命令处理脚本,而不是逐行处理。一个命令可以跨越多行。在 shell 解释器在执行脚本时到达命令之前,不会处理该命令。

shellbash在执行每个命令之前对其执行以下操作:

  1. 大括号扩展
  2. 波形符扩展
  3. 参数和变量扩展
  4. 算术展开
  5. 命令替换(以从左到右的方式完成)
  6. 分词
  7. 路径名扩展
  8. 报价删除

相关内容