【发布时间】:2020-07-04 02:10:39
【问题描述】:
我正在尝试通过传入绝对路径作为第一个参数 ($1) 来执行我的文件。我还想从该绝对路径开始添加标志,但我不知道如何告诉 optargs 从 $2 向前开始计数,因为如果我将绝对路径作为 $1 传递,它似乎会破坏 getopts 循环。
我在猜测我必须在以下代码中为第一个参数实现移位:
while getopts :lq flag; do
case $flag in
l) echo "executing -l flag"
;;
q) echo "executing -q flag"
;;
esac
done
我不确定如何处理这个问题。欢迎任何提示,谢谢。
【问题讨论】:
-
提供示例命令和预期输出。它有助于更好地回答。
-
请注意,一般来说,选项应该在之前参数;这是 POSIX 指定的行为。 GNU 允许将位置参数放在第一位是一个扩展,而且是一个相当不幸的扩展,因为它使解析模棱两可(要求用户添加
--end-of-options sigil 以防止以破折号开头的参数被错误地解析为选项)在没有其他情况的情况下。请参阅第 12.2 节,以 pubs.opengroup.org/onlinepubs/9699919799/basedefs/… 结尾
标签: bash shell sh getopt getopts