我开始学习 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
在执行每个命令之前对其执行以下操作:
- 大括号扩展
- 波形符扩展
- 参数和变量扩展
- 算术展开
- 命令替换(以从左到右的方式完成)
- 分词
- 路径名扩展
- 报价删除