私はユーザーが自分のシェルにソースを提供する必要がある移植性の高いスクリプトを開発しています。そのため、POSIXスクリプトを使用する必要があります。
スクリプトには便利な関数がたくさんあり、そのうちの1つは呼び出し関数の状態を返すという点で特別です
true
。false
return 0
さて、私はこのような状況でそれを使用しました。しかし、より読みやすく、true
forfalse
もreturn 1
それぞれ動作するようです。
問題はこれが有効かどうかです。全く同じようにそれとも違いがある場合です。ありがとうございます。
ベストアンサー1
true
移植可能ですが、それ自体では返されません。return true
移植性がなく、安定して動作しません。
次の機能がある場合:
f() {
true
}
そうであれば、はい、終了ステータスが0の関数から返されます。最後から落ちると、最後のコマンドの終了状態を関数の終了状態に戻します。
しかし、もちろん、true
中間体自体が制御フローに影響を与えないので、これは実際の状態に戻りません。
g() {
# silly example condition
if [ 1 = 1 ]; then
true
fi
echo something else
false
}
ただし、明示的な戻り値を追加できます。引数がない場合、return
最後のコマンドの終了状態も使用されます。:
特殊パラメータ '?'の値はn(符号なし10進整数)に設定し、nが指定されていない場合は最後に実行されたコマンドの終了状態に設定する必要があります。 nが符号なし10進整数でない場合、または255より大きい場合、結果は指定されません。
h() {
# silly example condition
if [ 1 = 1 ]; then
true
return
fi
echo something else
false
}
これで、return true
いくつかのシェルで好きなように機能することができますが、最終的にはそうではないかもしれません。少なくとも zsh では引数を算術式として扱うように見えるため、return true
変数の値が使用され、true
設定されていない場合、デフォルトは 0 です。
% i() { return 1+1; }
% i; echo $?
2
% unset true
% j() { return true; }
% j; echo $?
0
% true=123
% j; echo $?
123
andtrue
を常にandに設定し、スクリプトライブラリのユーザーがそれを混同しないことを信頼できる場合は、zshまたは標準シェルでandを使用できます。これらの名前を使用することはお勧めできませんが、同じ名前を使用することもできます。0
false
1
return true
return false
return "$true"
return "$false"
true_return_value
false_return_value
それ以外の場合は、標準シェルでtrue; return
andを使用できますが、これがandより読みやすいfalse; return
かどうかはわかりません。いずれにせよ、シェルプログラマは実際の戻り値がゼロであることに精通している必要があります。return 0
return 1