我不明白下面的表达。
function abc(){
..............
...............
[[ -f $filename]] && return 0 || return 1
}
根据教程,如果存在带有 filename 变量 name 的文件,则此函数返回 1,否则返回 0。
我理解&&
||
运算符,但是这个语句如何得到期望的结果?
根据我的说法,如果[[ -f $filename ]]
评估为 false ,则 的一个语句&&
为 false,则 and 的结果为 false。现在它转到 OR,如果第一个操作数为 0,则返回第二个操作数的结果,因此它应该返回 1,但它正在返回0。
这是如何评价的?
答案1
return
函数最后一行的两条语句都可以删除。
[[ -f "$filename" ]]
这是函数中return
删除了两个的最后一条语句(请注意引用的变量扩展和之前添加的空格]]
)。函数的“退出值”将是该语句的结果。
如果文件$filename
存在,该函数将以零值退出(表示“成功”、“是”、“确定”等),否则它将以一值退出(或更一般地,非零,表示某种“失败”)。
不要将||
和混合&&
在同一行,除非您知道它的作用。在命令行中为
command1 && command2 || command3
如果出现以下情况,将执行最后一条命令:任何一个之前的命令失败(返回非零)。
最好写一下
if command1; then
command2
else
command3
fi
如果这就是你的意思。
这在像这样的命令中很重要
[[ -f "$filename" ]] && echo "exists" || touch "$filename"
touch
如果失败,这将尝试执行命令echo
,如果没有地方可以输出字符串(发生写入错误),它可能会执行该命令。