我开始学习 Bash 脚本,我正在使用Bash 脚本教程
那里说
在 Bash 解释(或运行)我们脚本的每一行之前,它首先检查是否存在任何变量名。对于它识别的每个变量,它用它的值替换变量名。然后它运行该行代码并在下一行再次开始该过程。
那么 Bash 是否首先运行整个脚本来查找变量?我不确定这是否是作者试图说的,但如果是的话,我想这是不正确的?
当我执行:
#!/bin/bash
echo "hello $USERR"
USERR=John
Run Code Online (Sandbox Code Playgroud)
我得到hello了结果。
如果我运行:
#!/bin/bash
USERR=John
echo "hello $USERR"
Run Code Online (Sandbox Code Playgroud)
然后我得到hello John了结果。
这是一种非常草率的说法,即 shell 会扫描每个命令以进行扩展,例如变量(还有命令替换等)
可以将文本解释为暗示 shell 读取整个脚本并在执行前查找每一行的变量。事实并非如此。它按命令处理脚本命令,而不是逐行处理。一个命令可以跨越多行。直到 shell 解释器在执行脚本时得到它,才会处理命令。
bash在执行每个命令之前,shell 会对它执行以下操作: