如何在TCL中使用getopts获取命令行传入的文件名参数
TCL脚本通过getopts获取-f参数传入文件名的实现方案
前置说明
你给出的原始执行命令存在逻辑冲突:tclsh原生自带-f参数,作用是指定要执行的脚本文件,你写的tclsh -f application_report.txt delete_file.tcl会被tclsh解析为「执行application_report.txt脚本,传入参数为delete_file.tcl」,不符合你的需求。
如果要将-f作为自定义参数传入你的delete_file.tcl脚本,正确的执行命令格式为:
tclsh delete_file.tcl -f application_report.txt
如果你必须保持原命令格式
tclsh -f application_report.txt delete_file.tcl,可以直接在delete_file.tcl中输出$::argv0获取文件名,无需调用getopts,但这种方式不符合命令行参数设计规范,不推荐使用。
完整实现代码(delete_file.tcl内容)
# 加载TCL官方提供的命令行参数解析包 package require cmdline # 定义支持的参数列表,f.arg表示-f选项需要携带参数,后面为参数说明 set supported_options { {f.arg "" "指定要处理的文件名"} } # 解析命令行参数 if {[catch {array set params [cmdline::getoptions $argv $supported_options]} err]} { puts stderr "参数解析错误: $err" exit 1 } # 读取并输出-f传入的文件名 if {$params(f) ne ""} { puts $params(f) } else { puts stderr "错误:未通过-f参数传入文件名" exit 1 }
执行效果
运行上述给出的正确命令后,脚本会直接输出你传入的文件名:
application_report.txt
内容的提问来源于stack exchange,提问作者Tim Scott
相关产品推荐
相关产品推荐

