我正尝试在Linux系统中查找一个二进制文件,可以使用以下命令:
if [ -f `which $1` ] then
echo "File Found"
else
echo "File not Found"
fi
虽然代码可以正常工作,但问题是"which"将返回一个空操作符,而BASH将其解释为存在的东西,因此文件总是返回找到。有任何建议都可以。
谢谢
经过一些思考,没有理由使用 [[ ]]
(或者同样也没有理由使用 [ ]
)。甚至也没有必要使用命令替换符 $()
。
if which "$1" > /dev/null 2>&1; then
echo "found"
else
echo "not found"
fi
如果您正在使用 bash
,请使用[[ ]]
构造。 其中一个好处(众多好处之一)是它没有这个问题
[[ -f $(which $1) ]] && echo found
$()
代替。if [ `which "$1"` != "" ]; then
which
不会返回 ""
。我喜欢在编程中使用“哈希”(如果你是Bash用户的话...)(实际上,它比其他方法更具可移植性)
hash blahblah
bash: hash: lklkj: 找不到命令
hash /bin/ls <-- silently successful
这种方法在 Linux 和 OSX 上的工作方式类似,而“which”具有不同的行为。
hash "/bin/ls"
。但你说得对,新答案没有两个括号和四个大括号。现在每个人都能负担得起运行它了! - SiegeX