getopts 不捕获参数(文件重命名脚本)
getopts is not capturing arguments (file rename script)
基于Google's Style Guide,我做了如下脚本。该脚本应将 a.txt
和 b.txt
之类的文件更改为 PREFIX_1_prefix_a.txt
和 PREFIX_1_prefix_b.txt
。但是,当我输入:
$ sh rename_enum.sh -n 100 -P X -p Y
我期望 X_100_Y_a.txt
和 X_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
...我得到了想要的结果。不过还是感谢您的评论!
基于Google's Style Guide,我做了如下脚本。该脚本应将 a.txt
和 b.txt
之类的文件更改为 PREFIX_1_prefix_a.txt
和 PREFIX_1_prefix_b.txt
。但是,当我输入:
$ sh rename_enum.sh -n 100 -P X -p Y
我期望 X_100_Y_a.txt
和 X_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
...我得到了想要的结果。不过还是感谢您的评论!