bash何时以及如何确定输入行是否为赋值?

时间:2014-06-03 12:29:59

标签: bash variable-assignment

如果我输入以下两个命令:

i=1
var$i=2014

我收到错误消息var1=2014: command not found

我已经找到了如何在this SO帖子中使用declare创建动态变量名称,但我仍然想知道为什么会生成该错误消息。这意味着bash将var1=2014视为命令/可执行文件名而不是赋值,并且if this line is an assignment测试发生在$i扩展之前。

Qustion:

bash在解析输入行w.r.t之后的顺序是什么。分配

任何推荐的阅读也值得赞赏。

1 个答案:

答案 0 :(得分:1)

首先,它检查命令是否类似于赋值或普通命令调用。

然后它执行变量替换,命令替换等。它必须在确定命令行的类型后执行此操作,因为变量替换在进入赋值时是不同的。例如,写作时没有单词分裂:

var=$variable

但是当你写作时会有分词:

command $variable

最后,在所有替换,单词拆分,globbing之后,它执行命令。如果它确定它是一个赋值,它就分配变量;否则,它执行命令。

在你的情况下,因为

var$i=2014

是无效的赋值语法,第一步确定它是一个命令,所以最后一步尝试执行它。

这大大简化了。

您应该尽量避免使用变量 - 使用数组几乎总能更容易地获得相同的结果。