Bash-通过解析脚本命令参数构建URL查询字符串
我不经常使用Bash,但我需要使用一点Bash,它必须向web服务发出curl请求,并使用一个查询字符串尾部,该查询字符串尾部是根据script command arguments变量Bash-通过解析脚本命令参数构建URL查询字符串,bash,Bash,我不经常使用Bash,但我需要使用一点Bash,它必须向web服务发出curl请求,并使用一个查询字符串尾部,该查询字符串尾部是根据script command arguments变量$@中包含的命令参数构建的。因此,如果命令参数字符串类似于-e something-v-s somethingelse,那么必须生成的查询字符串是e=something&v=blank&s=somethingelse 目前,我的测试脚本如下所示: #!/bin/bash set -e echo "${@}"
$@
中包含的命令参数构建的。因此,如果命令参数字符串类似于-e something-v-s somethingelse
,那么必须生成的查询字符串是e=something&v=blank&s=somethingelse
目前,我的测试脚本如下所示:
#!/bin/bash
set -e
echo "${@}"
query_string=""
for arg in "${@}" ; do
if [[ "${arg}" =~ "-" ]] ; then
query_string+="${arg}="
else
if [ -z "${arg}" ] ; then
query_string+="blank&"
else
query_string+="${arg}&"
fi
fi
done
echo "${query_string}" | tr -d '-'
并产生不正确的输出
e=something&v=s=somethingelse&
我不确定我错在哪里。如有任何建议,我们将不胜感激。如何:
#!/bin/bash
set -e
echo "${@}"
option=true
query_string=""
for arg in "${@}" ; do
if $option ; then
query_string+="${arg}="
option=false
else
if [[ "${arg}" =~ "-" ]] ; then
query_string+="blank&${arg}="
else
query_string+="${arg}&"
option=true
fi
fi
done
echo "${query_string::-1}" | tr -d '-'
每次迭代都必须检查前一个参数,以查看它是否是一个开关,而不是一个值:
#!/bin/bash
set -e
echo "${@}"
prev_arg=""
query_string=""
for arg in "${@}" ; do
if [[ $arg == -* ]] ; then
# Current arg is a switch and the previous one was also a switch
# which means the value for it is blank
if [[ $prev_arg == -* ]] ; then
query_string+="blank&"
fi
query_string+="${arg}="
else
query_string+="${arg}&"
fi
prev_arg="$arg"
done
echo "${query_string::-1}" | tr -d '-'
这将产生以下输出:
something -v -s somethingelse
e=something&v=blank&s=somethingelse
这是我在我的中遗漏的:)记住前面的arg/opt。