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

如何正确传递含空格参数的变量至Shell脚本?

Bash中带空格参数的正确传递方法

直接展开$args时,Bash会按空白字符拆分参数,且不会解析字符串中的引号,导致"bar baz"被拆成"bar和baz"两个参数,这就是问题的根源。以下是几种正确的解决方法:

方法1:使用数组(推荐,最安全可靠)

Bash数组可以独立存储每个参数,传递时用"${args[@]}"展开,能完整保留每个参数的空格:

# 定义数组,每个元素对应一个独立参数
args=(foo "bar baz")
# 传递数组参数
sh test.sh "${args[@]}"

执行后test.sh会输出:

foo
bar baz

方法2:使用eval(不推荐,存在安全风险)

如果必须用字符串存储参数,可以通过eval重新解析引号,但这种方式会执行参数中的特殊命令(比如;、$()),仅在参数完全可控时使用:

args='foo "bar baz"'
eval sh test.sh $args

方法3:使用xargs(适合字符串转参数场景)

通过xargs处理字符串中的引号,拆分出正确的参数:

args='foo "bar baz"'
echo "$args" | xargs sh test.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:57:03