我正在寻找一个测试,如果定义了环境变量并且其值不同于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真值一起使用了.
但我会批准你可能必须转换来自一些粗糙的外部程序的输入:)