当我解析命令行参数时,等于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
那但对于嵌套=这没有帮助。有什么建议吗?
答案 0 :(得分:3)
使用shell language来完成字符串操作。不需要创建昂贵的流程只是为了在第一个等号上分割字符串。
(另外,通常建议对未导出的变量使用小写变量名。)
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
答案 1 :(得分:1)
这是因为参数包含的空格。请尝试在变量替换周围加上单引号(回答编辑)以防止它们被解析,即:
./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
手册页。