(x = 100)と{ x = 100;}の違いは何ですか?

(x = 100)と{ x = 100;}の違いは何ですか?

誰かが次の文を説明できますか?

$x=50

$ (x=100) # このコードはサブシェルでのみ実行されます。サブシェルの実行が完了すると、x値は元の値50に戻ります。

$エコ$x

米ドル50ドル


$x=50

${x=100; #ここで、x値は完全に変更され、xの現在のシェル値に影響を与え、50から100に変更されます。

$エコ$x

100ドル


どのようにこれが起こるのか、誰が説明できますか?

答え1

~から男乱交:

(リスト) listはサブシェル環境で実行されます(以下のコマンド実行環境を参照)。 シェル環境に影響を与える変数割り当ておよび組み込みコマンドは、コマンドの完了後に無効になります。

別の環境で呼び出されるコマンドは、シェルの実行環境に影響を与えることはできません。

{リスト; }listは現在のシェル環境でのみ実行されます。

答え2

Bourne などのシェルでは、( ... )コードはサブシェルで実行されるため、変数のすべての変更はそのサブシェルに限定され、親シェルには表示されません。代わりに、{ ... }コードは現在のシェルで実行され、その変数に影響を与えます。

答え3

あなたが言ったように:( )サブシェルが作成されます。{ ;}いいえ。これが結果が異なる理由です。{ ;}とにかく、単一のコマンドには意味がありません。グループ化機能です。

関連情報