如何在Bash中执行存储于变量内的含空格参数的命令?
解决Bash中变量存储带空格参数命令的执行问题
问题根源
你把命令存成字符串变量后,Bash执行$comm时会按空格拆分整个字符串,这里会被拆成./test.sh、"Abcd、Efgh"三个部分,所以test.sh拿到的第一个参数是"Abcd",就出现了你看到的错误输出。
解决方案
方法一:用数组存储命令(推荐)
Bash的数组可以正确保留包含空格的参数,不会被错误拆分,这是处理这类场景的标准做法:
# 定义数组,每个元素对应命令或参数(带空格的参数作为单个元素) comm=(./test.sh "Abcd Efgh") # 执行数组,必须用引号包裹${comm[@]},确保参数完整传递 "${comm[@]}"
执行后,test.sh会正确接收Abcd Efgh作为第一个参数,输出符合预期。
方法二:使用eval(谨慎使用)
如果一定要用字符串存储命令,可以借助eval解析字符串中的引号,但eval会触发所有字符的Shell展开,若参数包含$、*等特殊字符,可能引发意外问题,仅在确定参数安全时使用:
comm='./test.sh "Abcd Efgh"' eval "$comm"
内容的提问来源于stack exchange,提问作者ADR
相关产品推荐
相关产品推荐

