检查文件是否可读并且存在于一个if条件中:if [[-r -f"/file.png"]]

Min*_*int 10 bash debian if-statement

我正在编写一个if语句,通过执行以下操作来检查文件是否可读且存在:

if [[ -r "$upFN" && -f "$upFN" ]]; then
....
fi
Run Code Online (Sandbox Code Playgroud)

然后我想,乖乖你可以把它缩小,可能是这样的:

if [[ -r -f "$upFN" ]]; then
....
fi
Run Code Online (Sandbox Code Playgroud)

但这不起作用,它返回错误:

./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'
Run Code Online (Sandbox Code Playgroud)

D.S*_*ley 13

AFAICT,没有办法进一步合并它们.作为便携性笔记,[[ expr ]]便携性不如[ expr ]test expr.C风格&&||只包括在bash所以你可能要考虑使用的POSIX语法-a-o.就个人而言,我更喜欢使用,test expr因为它非常明确.许多shell(包括bash)包含一个内置的shell,因此您不必担心进程创建开销.

在任何情况下,我都会将您的测试重写为:

if test -r "$upFN" -a -f "$upFN"
then
  ...
fi
Run Code Online (Sandbox Code Playgroud)

该语法适用于传统的Bourne shell,Korn shell和Bash.您也可以使用[可移植的语法.

  • 那么何时应该使用特定于Bash的功能? (3认同)