以下代码将导致“if”语句提前退出,并且不执行“if”块中的“echo”命令。我想知道为什么这种情况只发生在“if”块中而不是在脚本的主要部分中。注意:我知道将 ':=' 更改为 ':-' 将解决问题 - 我不想解决问题,我希望了解导致问题发生的 'if' 块的执行环境之间的差异首先。
#!/bin/bash
if true; then
VAR=${$1:='val'}
echo "This does not run"
fi
VAR=${$1:='val'}
echo "This does run"
Run Code Online (Sandbox Code Playgroud)
输出是
line 4: ${$1:='val'}: bad substitution
line 7: ${$1:='val'}: bad substitution
This does run
Run Code Online (Sandbox Code Playgroud)
再说一遍 - 我对修复错误替换错误消息不感兴趣,我了解如何做到这一点以及为什么会发生这种情况。我想了解的是,为什么echo "This does not run"当“if”块中的上面有一个错误的替换时,该行不会运行。
转载于以下 bash 版本:
GNU bash,版本 5.1.16(1)-release (x86_64-pc-linux-gnu)
GNU bash,版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)