Bash:状態を設定するエレガントな方法ですか? [閉鎖]

Bash:状態を設定するエレガントな方法ですか? [閉鎖]
  • true && echo foo印刷されますfoo
  • false && echo foo印刷されませんfoo
  • bash -c "exit $a" && echo foofooに従って印刷されます$a

最後のものを書くためのよりエレガントな方法はありますか?終了値を設定するためにシェルを起動する必要があるのはやや面倒です。私は次のことを考えています:

  • return $a && echo foo
  • exit $a && echo foo

ただし、return機能でのみ機能し、決して実行されませexitecho foo

この場合、優雅さとは次のことを意味します。

  • わかりやすい
  • 持ち運べる
  • 読みやすい
  • 使いやすい
  • 覚えやすい
  • 短い
  • 高性能

trueたとえば、終了コードをパラメータ(文書化された機能)として使用すると、非常にエレガントになります。

それでは、もう少しエレガントな方法がありますか?

背景

使用できる場所の1つは次のとおりです。

$ parallel 'setexitval {= $_%=3 =} || echo $?' ::: 0 1 2 3  

Kosalonandaのバージョンはおそらく最高です。何が起こったのかは明らかです。文が長くも面倒でもない。覚えやすく持ち運びが簡単です。唯一の欠点は、別のシェルを分岐することです(〜0.5msかかります)。

$ parallel '(exit {= $_%=3 =}) || echo $?' ::: 0 1 2 3  

別の状況は、エラー状況をシミュレートする場合です。たとえば、さまざまな終了コードを設定する長期実行プログラムがあり、さまざまな終了コードに反応するいくつかのコードを書いているとします。(exit $a)長期実行プログラムを実行しなくても、それを使用して条件をシミュレートできます。

ベストアンサー1

まあ、returnそれは関数で動作するので、1つ作ってみましょう。

$ ret() { return "${1-0}"; }
$ ret 1 || echo foo
foo
$ ret 123 ; echo $?
123

サブシェルよりも多くの設定が必要ですが、後で使用する方が短く、サブシェルを分岐する必要はありません。

おすすめ記事