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

Bash脚本中如何将数组参数按顺序传递给另一个Bash脚本?

Bash 包装器脚本参数透传实现方案

核心思路是使用 Bash 内置的特殊参数 "$@" 完整保留所有输入参数的原始结构,避免带空格、特殊字符的参数被错误拆分。

完整可运行示例代码

#!/bin/bash

# 1. 自定义全局变量设置
export CUSTOM_ENV_1="自定义全局变量值1"
export CUSTOM_ENV_2="自定义全局变量值2"

# 2. 输入/权限校验逻辑
# 校验是否传入了目标脚本
if [ $# -lt 1 ]; then
    echo "使用说明: $0 <目标脚本路径> [目标脚本参数1 参数2 ...]"
    exit 1
fi
# 校验目标脚本有执行权限
if [ ! -x "$1" ]; then
    echo "错误:目标脚本 $1 不存在或无执行权限"
    exit 2
fi
# 此处可继续添加其他校验逻辑,如用户权限校验、参数合法性校验等

# 3. 透传参数调用目标脚本
target="$1"
shift # 移除第一个参数(目标脚本路径),剩余位置参数全部是目标脚本的入参
"$target" "$@"

# 可选优化:如果不需要在目标脚本执行后做后续处理,可以用exec替换当前进程,减少资源占用
# exec "$target" "$@"

核心规则说明

  • 传递参数时必须给 $@ 加双引号:双引号包裹的 "$@" 会严格保留每个参数的原始边界,哪怕参数包含空格、换行、通配符、引号等特殊字符也不会被错误拆分
  • 禁止使用 $* 传递参数:$* 会把所有参数拼接为单个以空格分隔的字符串,传递时会被重新拆分,完全破坏原有参数结构
  • 如果参数存储在自定义数组中,使用 "${数组名[@]}" 透传即可,示例如下:
# 自定义参数数组示例
args=("第一个参数 带空格" "第二个参数*带通配符" "第三个'带单引号'参数")
# 透传数组内所有参数
"$target" "${args[@]}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:03