如何使 getopts 只读取第一个字符帖子“-”

如何使 getopts 只读取第一个字符帖子“-”

我有一个 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停止处理选项。

相关内容