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
相关产品推荐
相关产品推荐

