【发布时间】:2015-07-14 12:04:36
【问题描述】:
我需要根据 bash 下是否设置了 shell_var_1 OR shell_var_2 来执行一些逻辑。
如果我使用 #!/bin/sh,我可以使用:
if [ "$shell_var_1" -ne "0" -o "$shell_var_2" -ne "0" ] ; then
logic
fi
这只是使用测试中的“-o”(http://unixhelp.ed.ac.uk/CGI/man-cgi?test)
但是,如果我指定 #!/bin/bash,并想使用 '-v' 选项来测试 shell 变量的存在(从 bash 4.2 开始添加),我该怎么做呢?
参考:https://tiswww.case.edu/php/chet/bash/bash.html
if [ -v shell_var_1 -o -v shell_var_2 ] ; then
logic
fi
^ 这被认为是正确的吗?我不是把 bash 和 test 算子混在一起了吗?
【问题讨论】:
-
它适用于我(bash 4.3.33)。至于混合 bash 和测试运算符,我怀疑它是,因为括号运算符是内置的 bash(与一些旧系统不同,实际上有一个
/bin/[可执行文件,或指向/bin/test的符号链接)。如果您担心执行规范 bash,只需使用双括号和||逻辑 OR 运算符。顺便说一句,我的系统确实有/usr/bin/[,但type [表明[是一个shell 内置,这意味着除非你专门调用/usr/bin/[,否则你使用的是shell 内置而不是可执行文件。 -
不要使用
-o或-a。它们在便携方面表现不佳。在[ ... ]测试之间使用||和&&。[/test目前都内置在 bash(和其他 shell)中,但外部二进制文件仍然存在于许多/大多数(/所有?)系统上。