在 bash 中使用 getopt 传递 Interger 参数

Pass Interger Argument with getopt in bash

提问人:Malte 提问时间:3/8/2022 更新时间:3/8/2022 访问量:187

问:

我想使用 getopt 传递一些 interger 号码。

这是我尝试过的:

if ! options=$(getopt -o n: -l num: -- $@)
then
    exit 1
fi

set -- $options

while [ $# -gt 0 ]
do
    case $1 in
    -n|--num) number=$2 ; shift;;
    esac
    shift
done

echo $number

问题是如果我运行它回声 “10”而不是 10 我不能将其用作 和 整数。./test.sh --num 10

欢迎任何帮助!

bash 命令行 参数传递 getopt

评论

0赞 chepner 3/8/2022
输出,不是,对我来说。10'10'
1赞 chepner 3/8/2022
至少在这个例子中,使用“works”,但我不记得为什么把它作为答案发布是有效的。(当一个人不确切地理解它是如何以及为什么工作时,不应该使用。eval set -- $optionseval
1赞 chepner 3/8/2022
getopt它本身引用每个参数以使用空格,但随后您需要像 shell 一样剥离生成的引用。您可以使用它来禁用它,但这可能会导致它自己的问题。eval-u
1赞 pjh 3/8/2022
有关如何在 Bash 中可靠地处理命令行选项(包括长选项)的信息,请参阅 BashFAQ/035(如何轻松处理脚本中的命令行选项和参数?)。请注意其中的这句话: 不要使用 getopt(1)。甚至不要在此页面上讨论 getopt。
1赞 pjh 3/8/2022
另请参阅如何在 Bash 中解析命令行参数?如何在 Bash 中获取带有标志的参数

答: 暂无答案