2015-10-12 82 views
2

当一个命令的存在测试,-n冗余的命令-v测试?

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

[ "$(command -v foo)" ] 

似乎功能上等同,但我见过最例子包括-n测试明确。我认为,如果一个命令不存在,这相当于:

[ "" ] 

它是不好的做法,忽略-n

+2

是(我认为这是不好的做法),但除非你做的寻找可能的选项混淆,以奇数球的命令名称的习惯,你可能是安全的'测试'(又名'''')。它会导致问题,必须是非常奇怪的;我想不出你将如何得到,例如,'command -v ...'中的'-z'。 –

回答

3

无论是否使用-n或不是,您正在测试command内置的输出。我会测试它的返回值:

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

非常好。谢谢! –

+2

有时当被要求在A或B之间进行选择时,答案是C! :)。但是,要概括你关于'-n'的问题并测试一个空字符串;在大多数情况下(或者甚至所有情况下)应该可以忽略'-n'。但是,尽可能明确地保证在所有情况下都是安全的,并提高可读性。 – hek2mgl