将bash脚本参数拆分为=&引用;

将bash脚本参数拆分为=&引用;,bash,parameters,sed,Bash,Parameters,Sed,我有一个bash脚本,您可以在其中使用“-option parameter”指定选项: 我想对它进行扩展,以便能够处理“-option=parameter”。有没有一种简单的方法可以在不使用特殊大小写的情况下拆分“=”?请尝试使用“”,而不是使用getopt或自行设置。它支持长参数(word)和短参数(字符) 下面是一个正在使用的示例: get_inputs () { set -- $( getopt -u -l class:,desc:,force,host:,help,verbose

我有一个bash脚本,您可以在其中使用“-option parameter”指定选项:


我想对它进行扩展,以便能够处理“-option=parameter”。有没有一种简单的方法可以在不使用特殊大小写的情况下拆分“=”?

请尝试使用“”,而不是使用getopt或自行设置。它支持长参数(word)和短参数(字符)

下面是一个正在使用的示例:

get_inputs () {
    set -- $( getopt -u -l class:,desc:,force,host:,help,verbose "c:d:fh:v?" "$@" )

    while [ $# -gt 0 ]; do 
        case "$1" in
            -c|--class)
                CLASS=$2
                shift
                ;;
            -d|--desc)  
                DESCR=$2
                shift
                ;;
            -f|--force)
                FORCE=1
                ;;
            -h|--host)
                HOST=$2
                shift
                ;;
            -v|--verbose)
                VERBOSE=1
                ;;
            --help)
                usage
                exit
                ;;
            *)
                break
                ;;
        esac
        shift
    done
}

只要稍作改变,您就可以实现您的愿望:

if [[ ! $1 =~ "^--?" ]] ; then 
    echo -e "Unrecognized option: $1\n$requestHelpMessage"; exit 1;

...

case $1 in
    -*branch) # do something with $2 here
    -*batch) # do something with $2 here
    -*version) # do something with $2 here
    *) # you get the idea
esac

测试允许在
$1

开头有一个或多个
-
,只是一个注释,因为它可能对您没有用处,但解析参数是一件痛苦的事情,而且边缘案例层出不穷。最好只是使用bash内置的getopts。我觉得getopts不太擅长文字,我需要它来复制另一个脚本的某些行为,所以我没有自由使用完全正确的字母。getopts实际上不适用于多个字符标志。请查看下面我关于使用getopt的回答。当然,您必须在调用
getopt
时使用
“$@”
,否则,参数中的空格将被破坏。+1,但是
而[$\gt-0]
是不必要的-
$1
将始终在选项后面包含
--
,这将在最后达到目标。您也可以使用
而不是true
if [[ ! $1 =~ "^--?" ]] ; then 
    echo -e "Unrecognized option: $1\n$requestHelpMessage"; exit 1;

...

case $1 in
    -*branch) # do something with $2 here
    -*batch) # do something with $2 here
    -*version) # do something with $2 here
    *) # you get the idea
esac