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

2 回答 2

4

if只需在您的长语句中使用转义符作为行尾:

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

awk语法显然期望if语句/表达式在一行上。在 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 回答