true && echo foo
印刷されますfoo
。false && echo foo
印刷されませんfoo
。bash -c "exit $a" && echo foo
foo
に従って印刷されます$a
。
最後のものを書くためのよりエレガントな方法はありますか?終了値を設定するためにシェルを起動する必要があるのはやや面倒です。私は次のことを考えています:
return $a && echo foo
exit $a && echo foo
ただし、return
機能でのみ機能し、決して実行されませexit
んecho 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
サブシェルよりも多くの設定が必要ですが、後で使用する方が短く、サブシェルを分岐する必要はありません。