如何使用bash检查环境变量的有效性是否存在且是否为真?

我正在寻找一个测试,如果定义了环境变量并且其值不同于0,false或NULL,则该测试将返回true.
ENABLE_SOMETHING=1
# or ENABLE_SOMETHING=true

if ... do ...

注意:在任何情况下,bash都不应该抱怨未定义的变量或具有奇怪的值,除了0,空,假或未定义之外的其他任何内容都将被视为真.

这样的测试不存在,如Java或C#等高级语言,但构建起来相对容易.

对您提出的问题有三条评论

1:您不使用bash中的文字“true”/“false”值;所有命令和条件结构都会产生退出状态或逻辑结果,它是0(真)或非0(假).
使用此功能,不要试图重新发明轮子.

2:尽量不要使用大写参数名,除非它们是环境变量;这是一个简单的约定,有助于保持代码清洁.

3:究竟是什么意思是“NULL”?文字字符串NULL,空值或其他什么?
后两个概念在bash中不存在;将取消设置NULL变量,您已经在检查它.

最有效的解决方案是接受变量(或参数,如bash调用它们)的函数,并检查这些条件,然后根据它设置退出状态,有效地将多个真值汇总到文字0或1.

例如:

is_true(){if [[“$1”= 0]];然后是假的; elif [[-z“$1”]];然后是假的; elif [[“$1”=〜[Ff] [Aa] [Ll] [Ss] [Ee]]];然后是假的;网络连接; }

> is_true“1”产生0,这是真的
> is_true“false”产生1,这是假的
> a = 10; is_true“$a”收益率为0
> grep -q somefile如果在某个文件中至少出现一次,则会产生0.

注意后一个例子清楚地表明你不需要这样的结构; bash中发生的一切都已经与这些基本的0/1真值一起使用了.

但我会批准你可能必须转换来自一些粗糙的外部程序的输入:)

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...