从鹈鹕到雨果的迁移

Migration from Pelican to Hugo

我正在阅读 article 展示如何将降价文件从 Pelican 迁移到 Hugo。我试图了解 awk 脚本在做什么。 :

# begin block, executed once, 
# to set field separator, output fied separator & print 3 dashes
BEGIN { FS = ":"; OFS = ":"; print "---" }

# ??? 
!c && /^$/ { print "---\n"; c = 1 }

# user defined function?
c { print; next }

# user defined function?
!c {
    # lower first field
     = tolower()

    # if first field is "date"
    if ( == "date") {
        # transform second field
         = gensub(/ ([^.]+)\.([^.]+).([^.]+)/, " \3-\2-\1", 1, )
         = gensub(/-([0-9])-/, "-0\1-", 1, )
    }

    if ( == "tags")
         = " [" gensub(/[-a-z]+/, "'\0'", "g", substr(, 2)) "]"

    print
}

我不是很明白,c!c是什么用户自定义函数?没有 function 关键字和参数? c=1到底是什么意思?

c 是一个变量。 c=1c 的值设置为 1

  • c 是对变量 c 及其真实性的测试,0
  • 除外
  • !c 是对变量 c 的测试,如果 c 未设置或 0
  • 则为真
  • c { print; next } 如果 c 设置为 nothing 或 0 以外的其他值,则 print (将打印整行,因为没有指定其他值)。 next 停止您正在做的事情并跳到下一行并重新开始。