首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么:防止${username=`whoami`}引发错误?

为什么:防止${username=`whoami`}引发错误?
EN

Stack Overflow用户
提问于 2014-10-29 16:42:55
回答 2查看 340关注 0票数 3

为什么

代码语言:javascript
复制
${username=`whoami`}

抛出一个错误,而

代码语言:javascript
复制
: ${username=`whoami`}

执行一个没有任何不良影响的任务?

我知道:是一个占位符。它在这个命令中有什么用?它是否等同于运行: 'whoami'

作为参考,以前的用法被称为#3,而新的用法称为#4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-29 17:15:59

代码语言:javascript
复制
${parameter=value}

做两件事:如果尚未设置value,则将parameter赋值给parameter;完成时将扩展为parameter值的直接影响。

该错误是直接影响的结果:当您运行

代码语言:javascript
复制
${user=`whoami`}

...on自己的行,然后扩展到并尝试以命令的形式运行whoami的输出。假设用户变量以前没有分配给,并且whoami的输出是james;然后它将尝试运行命令james,这将引发一个错误。

相反,跑

代码语言:javascript
复制
: ${user=`whoami`}

...first执行副作用(如果user尚未设置,则向user分配),然后运行:

代码语言:javascript
复制
: james

...which没有效果,所以只执行(赋值的)副作用。

票数 6
EN

Stack Overflow用户

发布于 2014-10-29 16:54:16

在#3中,根据bash手册页,您正在尝试执行whoami命令输出,即如果whoami命令输出为"peter",则#3表示调用了"peter“命令。此外,"username“变量被赋值为"peter”。

bash手册将${parameter:=word}描述如下:

指定默认值。如果参数未设置或为null,则将word的展开分配给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式分配。

同样,对于:命令--

没有效果;该命令除了展开参数和执行任何指定的重定向之外,什么也不做。返回零退出代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26636051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档