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.您也可以使用[
可移植的语法.
归档时间: |
|
查看次数: |
22745 次 |
最近记录: |