关于条件句的问题

发布于 2024-10-20 19:39:51 字数 162 浏览 4 评论 0原文

我怎样才能编写一个 POSIX shell 脚本来做两件事:

1)当 $var1 或 $var2 被定义且非空时,回显“成功”
2)当 $var3 被定义为任何内容时, echo "success2"

我尝试了 -ne -z 和 -a 运算符的许多组合,但我没有运气。

How can I write a POSIX shell script that does two things:

1) When $var1 OR $var2 is defined AND non-null, echo "success"
2) When $var3 is defined with anything, echo "success2"

I tried many combinations of the -ne -z and -a operators but I've had no luck.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉城已无爱 2024-10-27 19:39:51

(我在 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}” 扩展 为空;如果设置,则扩展为 X。这样你就可以区分 unset 和 null 变量。

(I tested the following in a Bash shell in POSIX mode - I am not absolutely certain that all of it is strictly 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
$ 

The first condition [ -n "$var1" -o -n "$var2" ] takes advantage of the fact that the not-null requirement also implies that the variable are set.

The second case is trickier. "${var3+X}" expands to nothing if var3 is unset and to X if it is set. That way you can tell unset and null variables apart.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文