我有一个shell脚本,其中有以下几行if [ -z "$xyz" ]if [ -n "$abc" ],但是我不确定它们的用途是什么。有人可以解释吗?

#1 楼

您可以在这里找到有关bash运算符的很好的参考。如果您使用其他外壳,只需搜索<my shell> operators,您将找到所需的一切。在您的特定情况下,您将使用:

-n
   string is not null.

-z
  string is null, that is, has zero length


来说明:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null


评论


如果您无法使-n正常工作,那可能是因为您遵循了网络上一些不好的指南(例如GeeksforGeeks或TutorialsPoint),但没有引用变量。该答案以及此处链接的指南均正确引用了该答案。如果您使用-n而不引用,它将告诉您即使是也不是空的! @terdon,非常感谢!

–法比奥说恢复莫妮卡
20-10-24在6:01



#2 楼

man testman [将为您提供测试命令的所有选项。在这种情况下,-n测试以查看$ abc的内容是否具有非零长度,而-z测试以查看$ xyz的内容是否为零长度字符串。

评论


man [在GNU bash版本4.1.2(1)-发行版(x86_64-redhat-linux-gnu)中对我不起作用。但是对人测试+1。

– andrew lorien
17 Mar 8 '17 at 0:03



注意man test(总是吗?)提供了外部程序版本的手册页,该手册页(至少对于GNU-coreutils版本)明确警告某些(大多数IME)shell的内置版本可能有所不同。

–dave_thompson_085
17年8月7日在9:16

#3 楼

为了扩展terdon的答案,我发现Unix / Linux-Tutorials Point上的Shell Basic运算符还包括与文件相关的运算符(以及其他有用的运算符)。