Function

UNIX 中函式的返回值

  • February 28, 2019

我不明白下面的表達。

function abc(){

..............

...............

[[ -f $filename]] && return 0 || return 1

}

根據教程,如果存在具有文件名變數名的文件,則此函式返回 1,否則返回 0。

我理解&& ||運營商,但是這個語句如何得到期望的結果?

根據我的說法,如果[[ -f $filename ]]評估為假,則一個語句&&為假,則結果為假。現在它轉到 OR,如果第一個操作數為 0,則返回第二個操作數的結果,因此它應該返回 1,但它正在返回0。

這是如何評估的?

return可以刪除函式最後一行的兩個語句。

[[ -f "$filename" ]]

這是函式中return刪除了 ’ 的最後一條語句(注意帶引號的變數擴展和之前添加的空格]])。該函式的“退出值”將是該語句的結果。

如果文件$filename存在,函式將以零值退出(表示“成功”、“是”、“ok”等),否則將以一值退出(或更一般地,非零,表示某種“失敗”)。


除非您知道它的作用,否則不要在同一條線上混合||使用。&&在命令行中

command1 && command2 || command3

如果前面的命令中的任何一個失敗(返回非零),則將執行最後一個命令。

最好寫

if command1; then
   command2
else
   command3
fi

如果這就是你的意思。

這在命令中很重要

[[ -f "$filename" ]] && echo "exists" || touch "$filename"

如果失敗,這將嘗試執行touch命令echo,如果沒有地方可以將字元串輸出到(發生寫入錯誤),它可能會這樣做。

引用自:https://unix.stackexchange.com/questions/439824