12

ここに簡単な質問があります。これが私が思うように動作しないのはなぜですか:

(echo "Test 1"; exit) && echo "Test 2"

...また...

VAR1=1
VAR2=2
[ $VAR1 == $VAR2 ] || (echo '$VAR1 does not equal $VAR2, exiting.'; exit)
echo -e 'Well, I\'m still alive yo!'

これら 2 つのスニペットのいずれかを実行すると、明示的なコマンドにもかかわらず、スクリプトの実行が続行されますexit

明らかに括弧が何らかの理由でコマンドに影響を与えていますが、私の質問はなぜですか?

4

4 に答える 4

17

括弧はその内容をサブシェルで実行するため、終了するのはサブシェルです。

&&通常、別のを使用するか、 の{}代わりに を使用して、同じ効果を得ることができます()

{ echo "Test 1"; exit; } && echo "Test 2"

または

echo "Test 1" && exit && echo "Test 2"
于 2013-11-10T06:05:19.317 に答える
1

の内容は( ... )サブシェルで実行されるため、exitこのシェルのみを使用します。このアプローチはあなたにとってよりうまく機能するはずであり、次の人が来てスクリプトを開くためのメンテナンスを読みやすくなります:

VAR1=1
VAR2=2
if [ $VAR1 == $VAR2 ] ; then
    echo -e "Well, I'm still alive yo!"
else
    echo "$VAR1 does not equal $VAR2, exiting."
    exit
fi
于 2013-11-10T06:10:32.403 に答える
0

かっこを削除するだけで、必要なことが行われます。

括弧は、その内容を別のシェル スクリプトに入れるのとexit同じです。ここで、 はそのシェル スクリプトを終了します。

于 2013-11-10T06:10:47.413 に答える