首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"var=${var:-word}“和"var=${var:=word}”有什么区别?

"var=${var:-word}“和"var=${var:=word}”有什么区别?
EN

Stack Overflow用户
提问于 2013-07-01 12:39:16
回答 4查看 2.9K关注 0票数 22

我在这上面读了bash手册页,但我不明白其中的区别。我测试了他们两个,他们似乎产生完全相同的结果。

如果变量的值不是通过命令行参数设置的,我希望设置该变量的默认值。

代码语言:javascript
复制
#!/bin/bash

var="$1"
var=${var:-word}
echo "$var"

上面的代码回显word,如果$1为null,则回显$1的值(如果不是null )。这一点也是如此:

代码语言:javascript
复制
#!/bin/bash

var="$1"
var=${var:=word}
echo "$var"

根据Bash手册页面,

${parameter:-word}使用默认值。如果参数为unset或null,则替换word的展开。否则,替换参数的值。 ${parameter:=word}分配默认值。如果参数未设置或为null,则将word的展开分配给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式分配。

是因为它们是一样的,而${parameter:=word}只是做得更多吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-01 12:53:18

当您使用var两次时,您看不到示例的不同之处,但您可以通过两个不同的变量查看它:

代码语言:javascript
复制
foo=${bar:-something}

echo $foo # something
echo $bar # no assignement to bar, bar is still empty

foo=${bar:=something}

echo $foo # something
echo $bar # something too, as there's an assignement to bar
票数 23
EN

Stack Overflow用户

发布于 2013-07-01 12:48:53

代码语言:javascript
复制
${var:=word}

等于

代码语言:javascript
复制
var=${var:-word}
票数 20
EN

Stack Overflow用户

发布于 2013-07-01 12:50:04

不同之处在于使用和分配。如果没有=,则使用word值,但不实际分配给var

对于那些只读取的变量来说,这是最重要的--这是你不能分配给它们的地方。

例如,您永远不能为编号的位置参数分配。因此,如果您希望函数在默认情况下处理可选的第一个参数,则可以使用以下代码:

代码语言:javascript
复制
${1:-default}

您不能在那里使用${1:=default}版本,因为您不能为位置参数1分配。是只读的。

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

https://stackoverflow.com/questions/17404696

复制
相关文章

相似问题

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