1

以下のコードは単純なバージョンですが、問題も示しています。

バージョンが機能しません:

df | awk -f <(cat - <<-'EOD'
{
    if(                                                                                                                                                                                       
        $1 == "tmpfs" ) {
            print $0;
        }
}
EOD
)

バージョン機能します:

df | awk -f <(cat - <<-'EOD'
{
    if( $1 == "tmpfs" ) {                                                                                                                                                                     
            print $0;
        }
}
EOD
)

違いは、if、同じ行 (機能する) または別の行 (機能しない) で条件を配置する方法です。製品バージョンには 4 つの長い条件があるため、コードを読みやすくするためにそれらを別の行に配置する必要があります。これに入った人いますか?

4

2 に答える 2

4

if長いステートメントの行末にエスケープを使用するだけです。

df | awk -f <(cat - <<-'EOD'
{
    if ( \
        $1 == "tmpfs" ) {
            print $0;
        }
}
EOD
)

awk構文は明らかに、ifステートメント/式が 1 行にあることを期待しています。Unix/Linux では、バックスラッシュ () を行継続文字として使用できるのが一般的です。if ( \したがって、上記の行と次の行は、構文的に同じ行にあるかのように扱われます。

于 2013-09-27T02:37:56.297 に答える
3

@mbratch はあなたの質問に答えましたが、余談ですが、投稿されたスクリプトは次のとおりです。

df | awk -f <(cat - <<-'EOD'
{
    if( \
        $1 == "tmpfs" ) {
            print $0;
        }
    }
EOD
)

これだけのように書くことができます/すべきです:

df | awk '$1 == "tmpfs"'

あなたが何をしようとしているのかを教えていただければ、おそらくもっとお手伝いできるでしょう。

于 2013-09-27T10:31:43.193 に答える