【发布时间】:2017-05-27 10:21:38
【问题描述】:
我有一个脚本 myscript 应该执行以下操作:
- 自行运行:
myscript - 带参数运行:
myscript myarg - 使用选项运行:
myscript -a 1 -b 2 -c 3 ... - 使用参数和选项运行:
myscript myarg -a 1 -b 2 -c 3 ...
我无法让 4. 工作,似乎在选项前面使用参数(我从 getopts 获取)会干扰 getopts 处理所有事情的方式。
我使用的代码基本上是这样的:
while getopts "a:b:c:" opt; do
case ${opt} in
a)
var_a=$OPTARG
;;
... more options here
esac
done
if [ ! -z "$1" ] && [[ ! "$1" =~ ^- ]]; then
... do stuff with first argument - if it's there and it's not just an option
fi
如果这个问题有一个简单的解决方案,我将非常感谢!
【问题讨论】:
-
你想过用 shift 来去掉第一个参数吗?
-
这确实超级简单,谢谢!我想这个问题可以关闭,你想把它作为答案发布吗?还是我应该写一个答案?该解决方案的一个潜在缺点:必须在调用
getopts之前使用if [condition] then ... shift ... fi,这可能是一个问题(但在我的情况下不是)。 -
除非你想支持
myscript -a 1 myarg -b 2 -c 3,否则在getopts循环之前运行if [[ $1 == myarg ]]; then shift; ...; fi不会有问题。
标签: bash shell unix command-line-arguments getopts