UNIX 中函数的返回值

UNIX 中函数的返回值

我不明白下面的表达。

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,如果没有地方可以输出字符串(发生写入错误),它可能会执行该命令。

相关内容