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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:01