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

Bash脚本传递带空格的双引号参数时拆分异常问题

解决Bash脚本传递带空格参数给Java程序的拆分问题

你的问题出在用普通字符串存储命令并直接执行的方式上,Bash在解析这类字符串时会忽略其中的引号,把空格当作参数分隔符,导致"a b"被拆成两个独立参数。

错误原因分析

你原来的脚本里:

x=""a b" "c""
CMD="java -jar test.jar "$x""
$CMD
  • 变量x的定义实际等价于x="a b c",引号会被Bash自动合并,并没有保留参数边界;
  • 执行$CMD时,Bash会把整个字符串按空白字符拆分,不管原有的引号,最终参数被拆成a、b、c三个。

正确解决方案

推荐使用数组来存储命令和参数,数组能准确保留每个参数的边界,避免被错误拆分:

方案1:用数组存储目标参数

#!/bin/bash
# 每个元素对应一个完整的参数,带空格的参数作为单个元素
args=("a b" "c")
# 展开数组时用双引号包裹,确保每个元素作为独立参数传递
java -jar test.jar "${args[@]}"

方案2:用数组存储整个命令

如果需要把Java命令本身也存起来,同样可以用数组:

#!/bin/bash
# 数组每个元素对应命令的一部分,参数边界完整保留
cmd=(java -jar test.jar "a b" "c")
# 执行数组中的命令
"${cmd[@]}"

方案3:直接执行(最简单的方式)

如果不需要用变量存储,直接写命令即可:

#!/bin/bash
java -jar test.jar "a b" "c"

以上三种方式都能保证"a b"作为第一个参数、"c"作为第二个参数传递给Java程序,得到你期望的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:37:12