为什么 `declare -p VAR` 在未设置的局部变量上返回“declare -- VAR”,但在未设置的全局变量上给出错误“bash:声明:A:未找到”?

为什么 `declare -p VAR` 在未设置的局部变量上返回“declare -- VAR”,但在未设置的全局变量上给出错误“bash:声明:A:未找到”?

我不明白:

$ declare -i VAR=0; \
> echo "$A"; \
> fun() { local -i VAR=1; echo {; echo "$VAR"; declare -p VAR; unset VAR; echo "$VAR"; declare -p VAR; echo }; };\
> fun; \
> echo "$VAR"; \
> declare -p VAR; \
> unset VAR; \
> echo "$VAR"; \
> declare -p VAR;
0
{
1
declare -i VAR="1"

declare -- VAR     # <-- no error message
}
O
declare -i VAR="0"

bash: declare: VAR: not found  # <-- error message

为什么调用会declare -p VAR给出不同的结果?我的意思是,我知道在一种情况下VAR是全局变量,而在另一种情况下它是局部变量。但是,通过对背后的某些“机制”有更深入的了解,结果是否可以预见呢?

如果不是,是否是故意在declare -p这里给出不同的结果?如果是这样,为什么?

相关内容