set -e
ここでは動作が異なります
set -e;
function foo {
}
そして
function foo {
set -e;
}
set -e
関数の内部に属していますか?関数の外部で宣言すると、set -e
シェルファイル内の「入れ子になった」関数に影響しますか?その逆はどうですか?電話しますかlocal set -e
?
答え1
注:ここの説明はBashバージョン4.0.35以降に適用されます。実装set -e
さまざまなシェル/バージョン間の大きな違い。フォローするスティーブンのアドバイスそしてそれを使用しないでくださいset -e
。
man bash
Shellの組み込みコマンド/セクションset
の内容はよく説明されていますが、テキストは少し緻密で少し集中する必要があります。あなたの特定の質問に対する答えは次のとおりです。
- 何か別のことをしてみてください
set -e
...一緒に..- 「違う」は言葉の意味によって異なりますが、厳しい範囲指定規則なしで答えは「いいえ」と思うようです。これは非常に直線的に機能します。 - set -eは関数の内部に属していますか?- 完全に有効です。
- 関数の外部で宣言されたset -eは、シェルファイル内の「入れ子になった」関数に影響しますか?- はい
- その逆はどうですか?- 関数から
set -e
返された後、ゼロ以外の状態が発生しますか?はい、終了します。
答え2
頭痛を防ぐための解決策:
function foo {
(
set -e;
)
}
(ちょうどサブシェルを使用してください)時には混乱してきれいにするために、次のようにします。
function foo {(
set -e;
# the rest goes here
)}