Function
UNIX 中函式的返回值
我不明白下面的表達。
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
,如果沒有地方可以將字元串輸出到(發生寫入錯誤),它可能會這樣做。