如果我输入以下两个命令:
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之后的顺序是什么。分配
任何推荐的阅读也值得赞赏。
答案 0 :(得分:1)
首先,它检查命令是否类似于赋值或普通命令调用。
然后它执行变量替换,命令替换等。它必须在确定命令行的类型后执行此操作,因为变量替换在进入赋值时是不同的。例如,写作时没有单词分裂:
var=$variable
但是当你写作时会有分词:
command $variable
最后,在所有替换,单词拆分,globbing之后,它执行命令。如果它确定它是一个赋值,它就分配变量;否则,它执行命令。
在你的情况下,因为
var$i=2014
是无效的赋值语法,第一步确定它是一个命令,所以最后一步尝试执行它。
这大大简化了。
您应该尽量避免使用变量 - 使用数组几乎总能更容易地获得相同的结果。