You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Gawk实现类似Bash中cat "$0"的脚本自打印功能?

在Gawk中实现无需传参即可打印脚本自身的功能

要实现和Bash脚本cat "$0"相同的效果,你可以利用Gawk的BEGIN块主动读取脚本自身文件,并通过修改内置变量避免处理额外参数。以下是修正后的脚本:

#!/usr/bin/awk -f

BEGIN {
    # 循环读取脚本自身的每一行并打印
    while ((getline line < ARGV[0]) > 0) {
        print line
    }
    close(ARGV[0])
    
    # 将ARGC设为0,阻止Gawk处理任何传入的位置参数
    ARGC = 0
}

解决原脚本的两个问题:

  • 避免打印传入参数内容:通过设置ARGC = 0,Gawk会忽略所有传入的位置参数,不会读取并打印这些参数对应的文件内容。
  • 无需传参即可执行:在BEGIN块中直接读取ARGV[0](当前脚本的路径,使用-f选项运行时会自动赋值),不需要依赖外部传入的文件名参数,运行./cat-itself.awk即可直接输出脚本自身。

原理说明:

  • ARGV[0]是Gawk的内置数组元素,在通过-f执行脚本时,会被设置为当前脚本的路径,这是获取脚本自身位置的可靠方式。
  • getline用于从指定文件(此处为脚本自身)读取内容,循环执行直到文件读取完毕。
  • close()用于关闭打开的文件,避免资源泄漏。
  • ARGC表示命令行参数的数量,将其设为0后,Gawk不会尝试处理ARGV数组中的其他参数。

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:55:01