我有一个 shell 脚本testShell.sh
,其用途getopts
如下:
#!/bin/bash
while getopts ":j:e:" option; do
case "$option" in
j) MYHOSTNAME=$OPTARG ;;
e) SCRIPT_PATH=$OPTARG ;;
*) ;;
esac
done
echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"
当我测试运行时,如下所示:
$ testShell.sh -jvalue1 -evalue4 -Djvalue3 -pvalue2
我得到的输出如下:
j=value3
e=2
remaining=
但我希望输出如下:
j=value1
e=value4
remaining=-Djvalue3 -pvalue2
是否可以确保 getopts
只看第一个字符的帖子 -
象征?所以它不会将解释-Djvalue3
为-jvalue3
和。-pvalue2
-e2
答案1
在 3 个论坛上发布并到处搜索后...最终我尝试了以下方法并且成功了...
testShell.sh -jvalue1 -evalue4 -- -Djvalue3 -pvalue2
注意
--
后-evalue4
输出是
j=value1
e=value4
remaining=-Djvalue3 -pvalue2
我相信--
要求getopts
停止处理选项。