次の表現は理解できません。
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
、文字列を出力する場所がないと(書き込みエラーが発生した場合)実行できます。