You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Bash脚本传递字符串数组并按%2C+拼接?

解决Shell脚本数组参数传递与字符串拼接问题

首先,你遇到的bash: state_code: command not found错误,根源是错误使用了命令替换语法:$("state_code" "county_code")会让bash把state_code当作一个可执行命令来运行,而它并不是系统或自定义命令,所以触发了报错。

一、正确传递数组/多参数的方式

在bash中,直接传递多个参数给脚本即可,不需要用$()包裹:

# 直接传递多个参数(等价于传递一个数组)
./download-data "state_code" "county_code"

# 如果是预先定义的数组,用这种方式传递
my_array=("state_code" "county_code" "city_code")
./download-data "${my_array[@]}"

"${my_array[@]}"会把数组的每个元素作为独立参数传递给脚本,完美保留每个元素的原始格式(比如带空格的元素)。

二、修改你的脚本以正确处理所有参数

原脚本的join_by函数逻辑没问题,但调用时只取了第一个参数$1,没有接收所有传递的参数。需要调整调用逻辑:

#!/bin/bash
function join_by {
    local d=$1; shift;
    if [ $# -eq 0 ]; then echo ""; return; fi # 处理空参数的边界情况
    echo -n "$1"; shift;
    printf "%s" "${@/#/$d}";
}

# 用"$@"接收所有传递的参数,而不是只取$1
selectQuery=$(join_by "%2C+" "$@")
echo "$selectQuery"

三、测试验证

运行修改后的脚本:

./download-data "state_code" "county_code"

会输出预期的拼接结果:

state_code%2C+county_code

补充说明

  • join_by函数新增了空参数判断,避免当没有传递任何参数时出现异常。
  • "$@"是bash中处理多参数/数组的最佳实践,它会正确保留每个参数的边界,即使参数包含空格或特殊字符。

内容的提问来源于stack exchange,提问作者Username

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:33:11