我需要实现一个使用混合(可选和非可选)参数调用的脚本,例如 -
./scriptfile -m "(argument of -m)" file1 -p file2 -u "(argument of -u)"
以随机顺序。我已经阅读了很多关于getopts
内置命令的内容,但我认为它并不能解决我的问题。我无法更改论点的顺序,所以我不明白如何一一阅读论点。
有人有什么想法吗?
我需要实现一个使用混合(可选和非可选)参数调用的脚本,例如 -
./scriptfile -m "(argument of -m)" file1 -p file2 -u "(argument of -u)"
以随机顺序。我已经阅读了很多关于getopts
内置命令的内容,但我认为它并不能解决我的问题。我无法更改论点的顺序,所以我不明白如何一一阅读论点。
有人有什么想法吗?
您真的应该尝试一下getopts
,它就是为此目的而设计的:
前任 :
#!/bin/bash
while getopts ":a:x:" opt; do
case $opt in
a)
echo "-a was triggered with $OPTARG" >&2
;;
x)
echo "-x was triggered with $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
使用不同的开关顺序运行脚本:
$ bash /tmp/l.sh -a foo -x bar
-a was triggered with foo
-x was triggered with bar
$ bash /tmp/l.sh -x bar -a foo
-x was triggered with bar
-a was triggered with foo
如您所见,更改开关的顺序没有问题
考虑使用 Python 及其出色的内置库argparse
。它将支持几乎所有合理和常规的命令行选项,并且比 bash 更轻松(奇怪的是,在命令行参数处理方面,这是一种相当糟糕的语言)。