如何检查是否在Bash中设置了变量 [英] How to check if a variable is set in Bash

查看:6
本文介绍了如何检查是否在Bash中设置了变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

function a {
    # if $1 is set ?
}

推荐答案

(通常)正确的方式

if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi

其中${var+x}parameter expansion,如果var未设置,则计算结果为空,否则替换为字符串x

引号离题

可以省略引号(所以我们可以说${var+x}而不是"${var+x}"),因为这种语法和用法保证了这只会扩展到不需要引号的内容(因为它要么扩展到x(它不包含断字符,所以不需要引号),要么扩展到什么都不包含(这会导致[ -z ],这很方便地计算为与[ -z "" ]相同的值(TRUE)。

但是,虽然可以安全地省略引号,而且这并不是所有人都能立即看到的(对于同时也是主要的Bash程序员的the first author of this quotes explanation来说都不是很明显),但是有时用引号[ -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" ]就可以了。

这篇关于如何检查是否在Bash中设置了变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆