UNIXの関数の戻り値

UNIXの関数の戻り値

次の表現は理解できません。

function abc(){

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

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

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

}

チュートリアルによると、この関数はファイル名変数名を持つファイルがある場合は1を返し、そうでない場合は0を返します。

私は&& ||演算子を理解していますが、このステートメントが望む結果をどのように取得しますか?

私によると、[[ -f $filename ]]声明の1つが偽と評価された場合、&&andの結果は偽です。 ORに行き、最初のオペランドが0の場合、2番目のオペランドの結果を返すので、1を返す必要がありますが、0を返します。

これはどのように評価されますか?

答え1

return関数の最後の行にある両方のステートメントを削除できます。

[[ -f "$filename" ]]

これは、2つが削除された関数の最後のステートメントですreturn(引用された変数の拡張と以前に追加されたスペースに注意してください]])。関数の「終了値」は、このステートメントの結果です。

ファイルが$filename存在する場合、関数は0(「成功」、「はい」、「確認」などを意味)の値で終了し、そうでなければ1(またはより一般的にはゼロ以外の値)で終了します。一種の「失敗」を意味する)。


それが何であるかわからない限り、同じ行に||混ぜないでください。&&コマンドラインで、次のように

command1 && command2 || command3

次の場合、最後のコマンドが実行されます。誰でも前のコマンドが失敗しました(ゼロ以外の値を返しました)。

むしろ書いてください

if command1; then
    command2
else
    command3
fi

もしこれがあなたが意味するものです。

これは次のコマンドで重要です。

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

touchこれが失敗した場合はコマンドの実行を試みecho、文字列を出力する場所がないと(書き込みエラーが発生した場合)実行できます。

関連情報