4

是否可以将命令行参数从 bourne 脚本中传递到函数中,以允许 getopts 处理它们。

我的脚本的其余部分很好地打包成函数,但看起来我必须将参数处理移动到主逻辑中。

下面是现在的写法,但是不行:

进程参数()
{
  而 getopts j:f: arg
  做
  回声“${arg}——${OPTARG}”
     案例“${arg}”在
       j) 如果 [ -z "${filename}" ]; 然后
           工作编号=$OPTARG
           别的
              echo "文件名 ${filename} 已设置。"
              echo "作业号 ${OPTARG} 将被忽略。
           菲;;
       f) 如果 [ -z "${job_number}" ]; 然后
              文件名=$OPTARG
           别的
              echo "已设置工作编号 ${job_number}。"
              echo "文件名 ${OPTARG} 将被忽略。"
           菲;;
     经社理事会
  完毕
}

做东西1
过程参数
做东西2

是否有可能以可以读取脚本参数的方式定义函数?这可以通过其他方式完成吗?我喜欢 getopts 的功能,但看起来在这种情况下我将不得不牺牲代码的美感来获得它。

4

1 回答 1

6

您可以在变量之后为 getopts 提供 args。默认值为 $@,但这也是 shell 函数用来表示参数的。解决方案是将“$@”(将脚本的所有命令行参数表示为单独的字符串)传递给 processArgs:

processArgs "$@"

将其添加到您的脚本中(并修复第 11 行中的引用),并尝试一些乱码测试参数:

$ ./try -j asdf -f fooo -fasdfasdf -j424pyagnasd
j -- asdf
f--foo
作业号 asdf 已设置。
文件名 fooo 将被忽略。
f——asdfasdf
作业号 asdf 已设置。
文件名 asdfasdf 将被忽略。
j -- 424pyagnasd
于 2008-12-09T08:02:30.150 回答