下面的代码是简单版本,但也说明了问题。
版本不有效:
df | awk -f <(cat - <<-'EOD'
{
if(
$1 == "tmpfs" ) {
print $0;
}
}
EOD
)
版本 工作:
df | awk -f <(cat - <<-'EOD'
{
if( $1 == "tmpfs" ) {
print $0;
}
}
EOD
)
区别在于我如何使用if,相同的行(工作)或不同的行(不工作)来放置条件。 生产版本有四个长条件,因此我必须将它们放在不同的行上以使代码更具可读性。有没有人进入过这个?
答案 0 :(得分:4)
只需使用转义作为长if
语句的行尾:
df | awk -f <(cat - <<-'EOD'
{
if ( \
$1 == "tmpfs" ) {
print $0;
}
}
EOD
)
awk
语法显然希望if
语句/表达式在一行上。在Unix / Linux中,通常能够使用反斜杠()作为行继续符。因此,它会将上面的if ( \
和下一行视为在语法上处于同一行。
答案 1 :(得分:3)
@mbratch回答了你的问题,但另外,你发布的脚本:
df | awk -f <(cat - <<-'EOD'
{
if( \
$1 == "tmpfs" ) {
print $0;
}
}
EOD
)
可以/应该写成:
df | awk '$1 == "tmpfs"'
如果你告诉我们你想要做什么,我们可能会提供更多帮助。