如何检查在Bash中是否设置了变量?

如何检查在Bash中是否设置了变量?

我如何知道是否在Bash中设置了一个变量?

例如,如何检查用户是否向函数提供了第一个参数?

function a {
    # if $1 is set ?}


蓝山帝景
浏览 664回答 3
3回答

汪汪一只猫

(通常)正确的方法if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi哪里${var+x}是参数展开如果var未设置,并替换字符串。x不然的话。引号离题引号可以省略(所以我们可以说${var+x}而不是"${var+x}")因为这种语法和用法保证了这只会扩展到不需要引号的东西(因为它可以扩展到x(它不包含分词,因此不需要引号),或者不包含(结果是[ -z  ],它方便地计算出与以下值相同的值(True):[ -z "" ])。然而,虽然可以安全地省略引号,但并不是所有人都立即明白这一点(甚至不是显而易见的)。本引文的第一作者解释也是一个主要的bash编码器),有时用引号编写解决方案会更好[ -z "${var+x}" ],以极小的O(1)速度惩罚代价。第一个作者还在代码旁边添加了这个注释,使用这个解决方案给出了这个答案的URL,这现在还包括了为什么可以安全地省略引号的解释。(经常)走错了路if [ -z "$var" ]; then echo "var is blank"; else echo "var is set to '$var'"; fi这通常是错误的,因为它没有区分未设置的变量和设置为空字符串的变量。也就是说,如果var='',则上述解决方案将输出“var是空”。在用户必须指定扩展或附加属性列表的情况下,Unset和“设置为空字符串”之间的区别是非常重要的,而不指定这些属性的默认值为非空值,而指定空字符串应使脚本使用空扩展名或附加属性列表。然而,这种区别在每一种情况下都可能是必要的。在这些情况下[ -z "$var" ]一切都会好起来的。

天涯尽头无女友

若要检查非空/非零字符串变量,即如果设置,请使用if [ -n "$1" ]正好相反-z..我发现自己-n多过-z.你会把它当作:if [ -n "$1" ]; then   echo "You supplied the first parameter!"else   echo "First parameter not supplied."fi

慕尼黑8549860

下面是如何测试参数是否是未定,或空(“空”)或用值设置:+--------------------+----------------------+-----------------+-----------------+|                    |       parameter      |     parameter   |    parameter    ||                    |   Set and Not Null   |   Set But Null  |      Unset      |+--------------------+----------------------+-----------------+-----------------+| ${parameter:-word} | substitute parameter | substitute word | substitute word || ${parameter-word}  | substitute parameter | substitute null | substitute word || ${parameter:=word} | substitute parameter | assign word     | assign word     || ${parameter=word}  | substitute parameter | substitute null | assign word     || ${parameter:?word} | substitute parameter | error, exit     | error, exit     || ${parameter?word}  | substitute parameter | substitute null | error, exit     || ${parameter:+word} | substitute word      | substitute null | substitute null || ${parameter+word}  | substitute word      | substitute word | substitute null |+--------------------+----------------------+-----------------+-----------------+资料来源:POSIX:参数展开式:在以“替代”表示的所有情况下,表达式都将替换为所显示的值。在所有用“赋值”显示的情况下,都为参数赋值,这也替换了表达式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python