我正在编写一个使用调用语法
的bash脚本script [options] [dir]
要检索选项集并解析它们,我使用getopts。但是我怎么能得到dir的论点呢?一般来说,如果我将最后一个参数检索为$ {@:$ {#@}},则它不一定是dir,它仍然是一个选项或它的值。
我用于getopts的代码:
DIR="."
RECURSIVE=
FILTER=
while getopts “hnf:” OPTION
do
case $OPTION in
h)
usage
exit 1
;;
n)
RECURSIVE="-maxdepth 1"
;;
f)
FILTER=$OPTARG
;;
\?)
exit 1
;;
:)
exit 1
;;
esac
done
你能帮忙吗?
答案 0 :(得分:2)
OPTIND
存储已处理参数的位置。循环后执行:
shift $((OPTIND-1))
现在目录位于$@
,第一个目录位于$1
。
答案 1 :(得分:0)
DIR=
RECURSIVE=
FILTER=
while getopts ':hnf:' OPTION ;do
case $OPTION in
h) usage; exit 1 ;;
n) RECURSIVE="-maxdepth 1" ;;
f) FILTER=$OPTARG ;;
*) echo "ERROR: invalid opion: -$OPTARG" 1>&2; exit 1 ;;
esac
done
# remove the options from the positional parameters
shift $((OPTIND-1))
DIR="$1"
echo "FILTER=$FILTER"
echo "DIR=$DIR"
命令行示例
script -n -f 'my.*filter' 'my/directory'
示例输出
FILTER=my.*filter
DIR=my/directory