检查 shell 中是否有非空字符串(而不是 !-z)

Ale*_*lls -3 shell bash test

我知道有一种方法可以做到这一点,但互联网搜索结果总是很糟糕 -

我想要做:

if [[ ! -z "$var" ]]; then
   # ....
fi
Run Code Online (Sandbox Code Playgroud)

但我一时想不起来了,我想是这样的:

if [[ -p "$var" ]]; then
   # ....
fi
Run Code Online (Sandbox Code Playgroud)

或者像这样:

if [[ -n "$var" ]]; then
   # ....
fi
Run Code Online (Sandbox Code Playgroud)

有人可以提供一个会出现在搜索引擎中的好答案吗,希望如果我将标题编辑为最佳,它也会有所帮助。

Kus*_*nda 5

您需要-n测试(“如果给定字符串的长度非零,则为 true”),这与测试-z(“如果给定字符串的长度为零,则为 true”)相反。

测试-p是完全不同的(“如果给定文件存在并且是命名管道,则为 true”)。

您可以在交互式bashshell 中输入以下内容来获取此信息

help test
Run Code Online (Sandbox Code Playgroud)

这将为您提供内置test实用程序的文档(这[是; see 的另一个变体help [,并且[[使用与; see 相同的测试help [[)。您还可以查看bash系统手册 ( man bash),该手册记录在标题为“条件表达式”的部分中。

因此,您的代码将是以下之一

if [[ -n $var ]]; then ...; fi
Run Code Online (Sandbox Code Playgroud)
if [ -n "$var" ]; then ...; fi
Run Code Online (Sandbox Code Playgroud)
if test -n "$var"; then ...; fi
Run Code Online (Sandbox Code Playgroud)

话虽如此,我认为没有什么问题

if [[ ! -z $var ]]; then ...; fi
Run Code Online (Sandbox Code Playgroud)

例如,如果您想要确保该值是空的,并且想要在该值不为空时输出错误消息。然后,代码将记录您的意图:“如果这不是空的,则有问题”。这是一个品味问题。