簡単なシェルツールを書いている間、どのように作業するのか分からないという節を見つけました。
[ "$#" -ne 3 ] || echo "wrong number of arguments" && exit
エコーが失敗する可能性がある状況を想像するのは難しいので、上記は期待どおりに機能します。しかし、echoが失敗する可能性がありますが、まだ実行されているコマンドに置き換えるとどうなりますかexit
?
デフォルトのシェルではなくexit
作成されたシェルがシャットダウンされるため、機能しません。( )
[ "$#" -ne 3 ] && ( command ; exit )
これは常に終了します。
[ "$#" -ne 3 ] && command ; exit
詳細な構文を使用できます。
if [ "$#" -ne 3 ] ; then
command
exit
fi
しかし、私が関与したくないif
構文を単純に保つには、どのようにexit
このような文字列コマンドの条件付き実行を含めることができますか?
ベストアンサー1
中かっこでコマンドをグループ化できます。
[ "$#" -ne 3 ] || { command; exit; }
{ list; }
リストされたコマンドがサブシェルではなく現在のシェルのコンテキストで実行されるようにします。
詳しくはこちらbash
グループ化コマンド