我有以下 shell 脚本:
#!/usr/bin/env bash
PARAMS=( arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 )
[ $# -lt ${#PARAMS[@]} ] && { echo "Usage: $0 ${PARAMS[@]}"; exit 1; }
DATA=$(printf "%s=%s&" ${PARAMS[@]} $@)
echo curl "http://example.com/api/?${DATA%?}"
它旨在获取n个参数并将它们与从参数中读取的值相关联。
所以当我运行时:
./curl_params.sh 1 2 3 4 5 6 7 8 9
我希望格式为:
curl http://example.com/api/?arg1=1&arg2=2&arg3=3&arg4=4&arg5=5&arg6=6&arg7=7&arg8=8&arg9=9
但相反,我有:
curl http://example.com/api/?arg1=arg2&arg3=arg4&arg5=arg6&arg7=arg8&arg9=1&2=3&4=5&6=7&8=9
我知道我需要与 结合${PARAMS[@]}
,$@
所以这些值被合并了。
是否有任何 Bash 语法可用于将参数名称转置/映射到相应的值?
为了澄清,参数的名称可能会改变。
我将存储
$@
在一个数组中,然后遍历索引:考虑这个 bash 会话:但是,bash 无法处理
显然 bash 无法正确处理所有括号:在脚本中我收到此错误:
所以你可以使用不同的循环:
注意,不要使用 ALL_CAPS_VARNAMES,将它们保留为 shell 保留。
如果您的 PARAMS 始终是 "arg" 后跟数字,则无需将 "$@" 存储在数组中,您可以使用间接变量引用它们:
paste
+printf
解决方案:测试: