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

Bash数组元素加单引号空格拼接,适配空数组及Maven exec传参

Bash数组转指定格式字符串(适配空数组)

需求回顾

需要将可能为空的Bash数组转换为以下格式的字符串:

  • 每个元素用单引号包裹
  • 元素间用单个空格分隔
  • 空数组时结果为空字符串

示例:

  • 空数组() → ""
  • 单元素数组("test") → "'test'"
  • 含空格元素数组("foo bar") → "'foo bar'"
  • 多元素数组("test" "foo bar") → "'test' 'foo bar'"

最优解决方案

无需if分支判断,直接用printf和Bash参数扩展即可实现:

array=("test" "foo bar")
# 生成带单引号的元素字符串,空数组时无输出
result=$(printf "'%s' " "${array[@]}")
# 移除末尾多余空格(空数组时无影响)
result=${result% }

# 传递给Maven exec:java
mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args="$result"

原理说明

  1. printf "'%s' " "${array[@]}":
    • 遍历数组的每个元素,将其用'包裹后追加一个空格。
    • 当数组为空时,该命令不会产生任何输出,result直接为空字符串。
  2. ${result% }:
    • 使用Bash的参数扩展语法,移除字符串末尾的空格。
    • 数组非空时,会去掉printf额外添加的最后一个空格;数组为空时,此操作不改变结果。

场景验证

  • 空数组:array=() → result为空字符串,对应Maven命令:
    mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args=""
    
  • 单元素数组:array=("test") → result为'test',对应命令:
    mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args="'test'"
    
  • 含空格元素数组:array=("foo bar") → result为'foo bar',符合要求。
  • 多元素数组:array=("test" "foo bar") → result为'test' 'foo bar',正确匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:30:03