次の条件の後に複数のコマンドを実行しようとします。
[ $VAR ] || echo "Error msg" ; echo "exit"
そして駅
[ -z $VAR ] && echo "Error msg" ; echo "exit"
期待どおりに動作しないことを知っています。実際に以前に行う方法を知っていましたが、実行する方法を忘れていました。私はif
'を使用したり、()
andを介して束ねるなど、多くの選択肢を完全に知っています{}
。を使用すると、()
実行中のスクリプトを終了しない子プロセスが生成されます。使用すると{}
動作しますが、より読みやすい代替手段が存在することを知っています。
私はこれを使って:
完璧です!今は全く覚えておらず、私が書いた台本も失ってしまいました。
この記事をどのように書くかを知っている人なら、助けてくれたら:
本当に感謝します!
ベストアンサー1
より読みやすい選択肢は次のとおりです。
if [ -z "$VAR" ]; then
echo "Error msg" 1>&2
exit 1
fi
私はそれがあなたが探しているものではないことを知っています。しかし、これは書くべきです。ここで&&
and の使用は||
少し神秘的です。私はあなたが何を覚えているのか(または間違って覚えているのか)はわかりませんが、それが何であれ、誰もそれが何であるかを推測できない場合は、確かに「読める」資格はありません。
ところで、周辺の引用を参照してください$VAR
。変数の置換には常に二重引用符を使用してください。、引用符を省略しなければならない理由と、そうすることが安全な理由を知らない場合。 (中に引用符を入れる必要はありませんが[[ … ]]
、中には引用符を入れる必要があります[ … ]
。)
eval
コマンドをグループ化する狡猾な方法ですが、使用するのは簡単ではありません。
別のコマンドから出力を生成するもう1つの方法は、コマンド置換で実行することです。今回も読めません。
[ "$VAR" ] || exit 1$(echo "error message" >&2)
特定の形式のグループ化構成(中括弧または//または/ if
/then
fi
while
do
done