gpt4 book ai didi

使用 -z 和 -n 在 bash 中检查字符串

转载 作者:行者123 更新时间:2023-11-29 09:26:30 25 4
gpt4 key购买 nike

我在 bash 中的测试语法中犯了一个错误,但现在我想了解在使用 -n-z 进行字符串检查时到底发生了什么。我编写了以下几行代码以在 LINENUM 变量中获取来自 grep 的行号。当找不到字符串时(文件中肯定只有一个),LINENUM 变量为空。

$ LINENUM=$(grep -w -n mystring myfile | cut -d: -f1)
$ echo --$LINENUM--
----
$ if [ -n $LINENUM ] ; then echo "Checked -n"; fi
Checked -n
$ if [ -z $LINENUM ] ; then echo "Checked -z"; fi
Checked -z

然后我意识到我忘记了双引号,然后给了我以下支票:

$ if [ -n "$LINENUM" ] ; then echo "Checked -n"; fi
$ if [ -z "$LINENUM" ] ; then echo "Checked -z"; fi
Checked -z

所以,在以前的测试中,我忘记了双引号,而 if 测试检查了什么,真的,因为我从 -n-z 得到了两个肯定的检查 ?

最佳答案

如果没有引号,您的测试语句(使用任一运算符,此处用 -X 表示)将减少为

if [ -X ]; then echo "Checked -X"; fi

根据 POSIX 标准,如果参数不为空,则 test 的单参数形式(您现在在这里)为真。由于文字字符串 -X 是非空的(它不再是运算符),它的计算结果为真。

有了引号,你就得到了

if [ -X "" ]; then echo "Checked -X"; fi

由于引号强制第二个参数为空,因此您有一个 test-X 的双参数形式(无论是 -n-z) 被正确识别为作用于第二个空参数的主要运算符。

关于使用 -z 和 -n 在 bash 中检查字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16355213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com