文ブロック

文ブロック

存在するLinuxプログラミングを始める本。に関するセクションがあります。文ブロック。このセクションを以下に説明します。

文ブロック

1つのステートメントのみが許可されている複数のステートメントを使用する場合(たとえば、ANDまたはORのリストなど)、中括弧{}で囲んでステートメントブロックを形成できます。たとえば、次のコードを参照してください。

get_confirm && {
    grep −v "$cdcatnum" $tracks_file > $temp_file 
    cat $temp_file > $tracks_file
    echo
    add_record_tracks
}

ドアブロックのコードがどのように実行されるかを説明してください...

ベストアンサー1

内部コードは{ ... }中括弧のないものと同じように実行されます。ただし、今の終了状態に依存しますget_confirm

0 終了状態(「成功」)で終了するとget_confirmブロックが実行され、それ以外の場合は実行されません。

これはほぼ次のとおりです。

if get_confirm; then
    # the contents of the block goes here
fi

(私の意見では良く見えます)。 「ほぼ」は、get_confirm返された場合、各ステートメントが報告する結果の状態に違いがあるためです。間違った(段落コードは同じ変数を$?ゼロ以外の値に設定しますが、ifステートメントは同じ変数をゼロに設定します。)これは、シェルに設定されているオプションと周辺コードの機能によっては重要です。

IMHOの本の例ではありません{ ... }

{ echo 'hello world'; date; } >file

単一のリダイレクトを使用して、{ ... }ブロック内の2つのコマンドの標準出力を同じファイルにリダイレクトします。

これは次のようになります(この場合も同じ効果があります)。

( echo 'hello world'; date ) >file

ただし、その中のステートメントは{ ... }シェルと同じ環境で実行され、inのステートメントはサブシェル( ... )(別々の環境)で実行されます。

あなたは違いを見ることができます

{ a=42; }; echo $a

そして

( a=1973 ); echo $a

最初は印刷します42が、2番目は印刷しません1973(割り当てはサブシェルで発生し、外部環境には影響しません)。

}構文に関する注意:ブロックの終わりは改行{ ... }または後にする必要があります;。無効で{ echo 'hello' }{ echo 'hello'; }

{ 
    echo 'hello'
}

はい。

おすすめ記事