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

如何在Bash中将含空格的参数存入变量并正确传递?

Bash中带空格参数的变量存储与正确传递方法

在Bash脚本中,若要把包含带空格的参数(比如存入变量a的file name)打包到单个变量后传递给命令,直接用普通字符串变量会触发参数拆分错误——比如执行printArguments $b时,file name会被拆成两个独立参数。以下是几种可行的解决办法:

数组方案(推荐)

用数组存储参数,通过"${b[@]}"的方式可正确展开参数,避免拆分:

a="file name"
b=("foo" "$a")
printArguments "${b[@]}" # 输出:$1=»foo«  $2=»file name«

注意:必须给${b[@]}加上双引号,直接写${b[@]}仍会触发参数拆分。

eval方案(谨慎使用)

eval可以解析变量中的引号,实现正确参数传递,但存在严重安全风险——如果变量内容不可控,可能会执行恶意命令:

a="file name"
b='foo "$a"'
eval "printArguments $b" # 输出:$1=»foo«  $2=»file name«

bash -c方案(需注意安全)

通过导出函数和变量,再用bash -c执行命令,同样能实现参数正确传递,但也和eval一样存在安全隐患:

a="file name"
export -f printArguments
export a
b='foo "$a"'
bash -c "printArguments $b" # 输出:$1=»foo«  $2=»file name«

另外需要注意空数组与空字符串的展开差异:

  • 空数组b=()用"${b[@]}"展开后,不会向命令传递任何参数
  • 空字符串b=""用"$b"展开后,会向命令传递一个空参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:23:17