加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 22:34:58 所属栏目:安全 来源:网络整理
导读:如果我键入以下两个命令: i=1var$i=2014 我收到错误消息var1 = 2014:找不到命令. 我已经找到了如何在this SO post中声明动态变量名,但我仍然想知道为什么会生成错误消息.这意味着bash将var1 = 2014视为命令/可执行文件名而不是赋值,if if这一行是在$i扩展
如果我键入以下两个命令:

i=1
var$i=2014

我收到错误消息var1 = 2014:找不到命令.

我已经找到了如何在this SO post中声明动态变量名,但我仍然想知道为什么会生成错误消息.这意味着bash将var1 = 2014视为命令/可执行文件名而不是赋值,if if这一行是在$i扩展之前发生的赋值测试.

Qustion:

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

任何推荐的阅读也不胜感激.

解决方法

首先,它检查命令是看起来像赋值还是普通的命令调用.

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

var=$variable

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

command $variable

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

在你的情况下,从那以后

var$i=2014

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

这大大简化了.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读