繁体   English   中英

如何在Bash中解析命令行参数(作为键值对)?参数说与嵌套分隔符

[英]How do I parse command line arguments(as key value pair) in Bash? with arguments say with nested delimiters

当我解析命令行参数等于as分隔符,它可以嵌套等于。 CC =“arm-oe-linux --sysroots = / home / somelocation”CFLAGS =“”我试过这个:

for ARGUMENT in "$@"
do
    KEY=$(echo $ARGUMENT | cut -f1 -d=)
    VALUE=$(echo $ARGUMENT | cut -f2 -d=)   

   echo $KEY
   echo $VALUE
   echo "*******************"

    case "$KEY" in

            CC)    CC=${VALUE} ;;     
        CFLAGS)    CFLAGS=${VALUE} ;;     
             *)   
    esac    
done

但是对于嵌套=这没有帮助。 有什么建议?

使用shell语言来完成字符串。 不需要创建昂贵的流程只是为了在第一个等号上分割字符串。

(另外,通常建议对未导出的变量使用小写变量名。)

for argument; do #syntactic sugar for: for argument in "$@"; do
    key=${argument%%=*}
    value=${argument#*=}

    echo "$key"
    echo "$value"
    echo "*******************"

    case "$key" in

            CC)    CC=$value;;
        CFLAGS)    CFLAGS=$value;;
    esac    
done

这是因为参数包含的空格。 请尝试在变量替换周围放置单引号(回答编辑)以防止它们被解析,即:

./yourscriptname.sh CC='"arm-oe-linux --sysroots=/home/somelocation"' CFLAGS='""'

此外,您的参数不止一次包含“=”。 为了避免这种情况,您可以改进脚本,如下所示:

for ARGUMENT in "$@"
do
   eval $ARGUMENT 
done
echo -e CC=$CC
echo -e CFLAGS=$CFLAGS

请记住单引号。 有关更多信息,您可以看到eval手册页。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM