getopts 不捕获参数(文件重命名脚本)

getopts is not capturing arguments (file rename script)

基于Google's Style Guide,我做了如下脚本。该脚本应将 a.txtb.txt 之类的文件更改为 PREFIX_1_prefix_a.txtPREFIX_1_prefix_b.txt。但是,当我输入:

$ sh rename_enum.sh -n 100 -P X -p Y

我期望 X_100_Y_a.txtX_101_Y_b.txt,但我得到 _1_a.txt_2_b.txt。谁能告诉我我做错了什么?

#!/bin/bash

#verbose='false'
nflag=1
Pflag=''
pflag='_'
files='*.txt'

while getopts 'nPpf' flag; do
    case "${flag}" in
        n) nflag="${OPTARG}" ;;
        P) Pflag="${OPTARG}_" ;;
        p) pflag="_${OPTARG}_" ;;
        f) files="${OPTARG}" ;;
        #v) verbose='true' ;;
        *) error "Unexpected option ${flag}" ;;
    esac
done

for i in ${files}
do
    mv "$i" "${Pflag}${nflag}${pflag}$i"
    nflag=$((nflag + 1))
done

我发现 this man page 这解释了如果一个标志有一个参数,那么 它后面应该跟一个冒号。我所要做的就是更改线路...

while getopts 'nPpf' flag; do

...到...

while getopts 'n:P:p:f:' flag; do

...我得到了想要的结果。不过还是感谢您的评论!