如何编写一个执行两件事的POSIX shell脚本:
1)当定义$ var1 OR $ var2且非空时,回显“成功”
2)当$ var3定义为任何东西时,回显“success2”
我尝试了-ne -z和-a运算符的许多组合,但我没有运气。
答案 0 :(得分:2)
(我在POSIX模式的Bash shell中测试了以下内容 - 我并不完全确定所有内容都是严格的POSIX)
$ var1=
$ var2=
$ if [ -n "$var1" -o -n "$var2" ]; then echo "success"; fi
$ var2=1
$ if [ -n "$var1" -o -n "$var2" ]; then echo "success"; fi
success
$ var3=
$ if [ -n "${var3+X}" ]; then echo "success2"; fi
success2
$ unset var3
$ if [ -n "${var3+X}" ]; then echo "success2"; fi
$
第一个条件[ -n "$var1" -o -n "$var2" ]
利用了非空要求也暗示变量已设置的事实。
第二种情况比较棘手。如果"${var3+X}"
未设置,则var3
expands为空,如果设置为X
则为{{1}}。这样你可以分开unset和null变量。