bash下shell变量的逻辑OR存在性测试

时间:2015-05-04 22:56:18

标签: bash shell

如果在bash下设置了shell_var_1或shell_var_2,我需要执行一些逻辑。

如果我使用#!/ bin / sh,我可以使用:

if [ "$shell_var_1" -ne "0" -o "$shell_var_2" -ne "0" ] ; then
 logic
fi

这只是使用" -o"来自test(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和测试运算符吗?

1 个答案:

答案 0 :(得分:3)

endUpdate

...是一种非常简洁和惯用的方式,用bash编写它,与古代版本兼容,假设您认为变量设置为空值不存在。

如果您想要一个便携式替代方案,将设置为零字节值的变量视为未设置,则

[[ $shell_var_1 || $shell_var_2 ]]

...将服务。

如果您想要一个将设置为空值的变量视为现有的便携式替代方案,那么

[ -n "$shell_var_1" ] || [ -n "$shell_var_2" ]

......会这样做。

如果你真的想使用[ -n "${shell_var_1+set}" ] || [ -n "${shell_var_2+set}" ] (因此,将变量设置为空值,但是与POSIX shell和旧版bash版本不一致 - 包括MacOS附带的版本),请使用{{ 1}} - 这使读者明确清楚地知道您使用的是仅使用bash的语法,并且不会出现-v[[ ]](甚至是test的一些模糊错误当以超过2-arg形式使用时,它们倾向于以bash内置形式出现:

[
相关问题