我正在编写一条if语句,它通过执行以下操作检查文件是否可读并存在:
if [[ -r "$upFN" && -f "$upFN" ]]; then
....
fi
然后我想,您可以将其缩小,也许是这样的:
if [[ -r -f "$upFN" ]]; then
....
fi
但这不起作用,它返回错误:
./ftp.sh: line 72: syntax error in conditional expression
./ftp.sh: line 72: syntax error near `"$upFN"'
./ftp.sh: line 72: `if [[ -r -f "$upFN" ]]; then'
最佳答案
AFAICT,没有办法将它们进一步结合起来。作为可移植性说明,[[ expr ]]
的可移植性低于[ expr ]
或test expr
。 C风格的&&
和||
仅包含在bash中,因此您可能要考虑对,和将-a
和-o
用作POSIX语法。就个人而言,我更喜欢使用test expr
,因为它非常明确。许多shell(包括bash)都包含一个内置函数,因此您不必担心进程创建的开销。
无论如何,我都会将您的测试重写为:
if test -r "$upFN" -a -f "$upFN"
then
...
fi
该语法将在传统的Bourne shell,Korn shell和Bash中工作。您也可以随便使用
[
语法。