[英]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.