当一个命令的存在测试,-n冗余的命令-v测试?
[ -n "$(command -v foo)" ]
和
[ "$(command -v foo)" ]
似乎功能上等同,但我见过最例子包括-n
测试明确。我认为,如果一个命令不存在,这相当于:
[ "" ]
它是不好的做法,忽略-n
?
当一个命令的存在测试,-n冗余的命令-v测试?
[ -n "$(command -v foo)" ]
和
[ "$(command -v foo)" ]
似乎功能上等同,但我见过最例子包括-n
测试明确。我认为,如果一个命令不存在,这相当于:
[ "" ]
它是不好的做法,忽略-n
?
无论是否使用-n
或不是,您正在测试command
内置的输出。我会测试它的返回值:
if command -v "$cmd" >/dev/null 2>&1 ; then
echo "command $cmd exists"
fi
非常好。谢谢! –
有时当被要求在A或B之间进行选择时,答案是C! :)。但是,要概括你关于'-n'的问题并测试一个空字符串;在大多数情况下(或者甚至所有情况下)应该可以忽略'-n'。但是,尽可能明确地保证在所有情况下都是安全的,并提高可读性。 – hek2mgl
是(我认为这是不好的做法),但除非你做的寻找可能的选项混淆,以奇数球的命令名称的习惯,你可能是安全的'测试'(又名'''')。它会导致问题,必须是非常奇怪的;我想不出你将如何得到,例如,'command -v ...'中的'-z'。 –