如何正确传递含空格参数的变量至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
相关产品推荐
相关产品推荐

