如何在Bash脚本中获取指定可选命名参数(如后缀参数-s)
Bash 脚本可选
-s 参数实现方案 你可以通过内置的getopt工具完成参数解析,支持 -s 放在文件名前/后的任意调用形式,完整实现代码如下:
#!/bin/bash # 初始化后缀变量,默认空 suffix="" # 存放解析后的文件列表 files_list=() # 用getopt解析短选项,s:表示-s需要带参数 parsed_args=$(getopt -o s: -- "$@") # 把解析后的参数重置到位置参数$1,$2... eval set -- "$parsed_args" # 处理选项 while true; do case "$1" in -s) suffix="$2" shift 2 ;; --) shift break ;; *) echo "未知参数: $1" >&2 exit 1 ;; esac done # 剩余的所有位置参数都是文件名,存入列表 files_list=("$@") # 你原有的遍历逻辑,修改为拼接后缀 for param in "${files_list[@]}" do # 拼接后缀后的文件名,注意变量加引号避免空格问题 target_file="${param}${suffix}" file_name=$(< "$files/$target_file") # 此处补充你自己的业务逻辑 done
调用验证
- 无后缀调用:
./exec.sh filename1 filename2,此时suffix为空,文件名不变 - 带后缀调用:
./exec.sh filename1 filename2 -s bla,最终处理的文件名为filename1bla、filename2bla - 也支持-s放在前面的调用:
./exec.sh -s bla filename1 filename2,效果完全一致
说明
getopt -o s:中的冒号表示-s选项必须携带参数,符合你的需求- 解析后剩余的位置参数全部为文件名,不会和选项冲突
内容的提问来源于stack exchange,提问作者demonoid
相关产品推荐
相关产品推荐

