当前位置: 首页 > 面试题库 >

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

方斌
2023-03-14
问题内容

我在此阅读了bash手册页,但我不了解其中的区别。我对它们进行了测试,它们似乎产生了完全相同的结果。

如果未通过命令行参数设置值,我想设置变量的默认值。

#!/bin/bash

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

上面的代码回显wordif $1为null并回显$1if不为null的值。这样:

#!/bin/bash

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

根据Bash手册页,

${parameter:-word}使用默认值。如果参数未设置或为null,则替换单词的扩展名。否则,将替换参数的值。

${parameter:=word}分配默认值。如果参数未设置或为空,则将单词扩展指定给参数。然后替换参数的值。不能以此方式分配位置参数和特殊参数。

它们是相同的,${parameter:=word}只是更多?


问题答案:

使用var两次时,您看不到示例的差异,但是可以使用两个不同的变量来查看差异:

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


 类似资料:
  • 问题内容: 在编程中,尤其是在Java中,两者之间有什么区别? 和 这会对for循环产生什么影响? 例如 问题答案: tldr; 尽管和都会使它们所应用的变量递增,但是by 所返回的结果是递增之前的变量值,而by 所返回的结果就是应用递增之后的变量值。 进一步说明 当或形成完整的语句时(如您的示例),两者之间没有区别。例如以下 等同于 但是,当或用作较大语句的一部分时,两者可能不相等。例如,以下断

  • Kotlin中的和有什么区别? 如本链接所述: 只读属性声明的完整语法与可变属性声明的不同之处在于两个方面:它以val而不是var开头,并且不允许setter。 但就在前面有一个使用setter的示例。 为什么我们两者都需要? 这不是Kotlin中变量的重复,与Java的区别:“var”vs.“val”?因为我询问的是与文档中的特定示例相关的疑问,而不仅仅是一般性的疑问。

  • 假设我有一个这样的设置: IntelliJ为中的: lateinit变量覆盖lateinit变量 伊伊伊..?来吧,你的观点是什么? 我最终意识到我的在中确实应该是一个,而不是-它消除了警告-但即便如此,我还是想知道…是否有关于覆盖的内容,我应该知道但不知道,IntelliJ想告诉我但没有?

  • 本文向大家介绍C#中var和dynamic之间的区别,包括了C#中var和dynamic之间的区别的使用技巧和注意事项,需要的朋友参考一下 我们知道,任何语言的编程都以声明变量开始,然后对其进行定义和逻辑实现。因此,最重要的因素之一就是知道在开始用任何编程语言声明变量之前如何对其进行编码。 现在,如果我们使用C#语言的实例,则变量的声明会随着语言的发展而变化。与以前的C#版本一样,所有编写的代码都

  • 问题内容: ECMAScript 6引入了该声明 我听说它被描述为“局部”变量,但是我仍然不太确定它的行为与关键字的不同。 有什么区别?什么时候应该用完? 问题答案: 主要区别是作用域规则。用关键字声明的变量的作用域为立即函数主体(因此作用域为函数),而变量的作用域为由表示的立即 封闭 块(因该块作用域)。 将关键字引入语言的原因是函数范围令人困惑,并且是JavaScript中错误的主要来源之一。

  • 苹果Swift语言中的和有什么区别? 在我的理解中,它是一种编译语言,但它不会在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,难道不是生产环境的问题吗?