Bash -n命令v测试中的冗余?

Bash -n命令v测试中的冗余?,bash,shell,Bash,Shell,在测试命令是否存在时 [ -n "$(command -v foo)" ] 及 在功能上似乎是等效的,但我看到的大多数示例都包括显式的-n测试。我假设如果命令不存在,则相当于: [ "" ] 省略-n是否是一种不良做法?无论是否使用-n,您都在测试命令的输出。我会测试它的返回值: if command -v "$cmd" >/dev/null 2>&1 ; then echo "command $cmd exists" fi 是的(我认为这是一种不好的做法),但

在测试命令是否存在时

[ -n "$(command -v foo)" ]

在功能上似乎是等效的,但我看到的大多数示例都包括显式的
-n
测试。我假设如果命令不存在,则相当于:

[ "" ]

省略
-n
是否是一种不良做法?

无论是否使用
-n
,您都在测试
命令的输出。我会测试它的返回值:

if command -v "$cmd" >/dev/null 2>&1 ; then
    echo "command $cmd exists"
fi

是的(我认为这是一种不好的做法),但除非你养成了寻找奇怪的ball命令名称的习惯,这些名称可能会与
测试的选项混淆(又称
[
)。如果它要引起问题,那一定是非常奇怪的一个球;我想不出你是如何从
命令-v…
中得到a
-z
。有时当被要求在a或B之间选择时,答案是C!:)。然而,为了概括你关于
-n
和测试空字符串的问题,在大多数(甚至全部)中在某些情况下,可以省略
-n
。但是,尽可能明确可以保证在所有情况下都是安全的,并提高可读性。
if command -v "$cmd" >/dev/null 2>&1 ; then
    echo "command $cmd exists"
fi