我在Bash中有一个可能为空的array.我需要将数组转换为单字符串,在每个元素两边放置一个单引号,并用一个空格分隔这些元素.例如:
-
()
:""
. -
("test")
:"'test'"
. -
("foo bar")
:"'foo bar'"
. -
("test" "foo bar")
:"'test' 'foo bar'"
.
假设我的数组是$array
,我把结果放在$result
.我想将结果作为参数传递给Maven exec:java
exec.args
,如下所示:
array=("test" "foo bar")
result= # TODO
mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args="$result"
这相当于:
mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args="'test' 'foo bar'"
重要的是,请注意,如果数组为空,则等同于:
mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args=""
我本以为这个问题在20年前就会得到答案--也许已经得到了答案,但我找不到.我找到了Bash script pass arguments to maven个,没有答案.我找到了与分隔符连接相关的各种答案,但找不到任何可以用单引号引用每个元素、使用分隔符连接的方法,and如果数组为空,仍会生成空字符串.
例如,Concat array elements with comma and single quote - Bash非常接近:
array=("test" "foo bar")
joined=$(printf " '%s'" "${array[@]}")
result="${joined:1}"
mvn exec:java -Dexec.mainClass="org.example.Main" -Dexec.args="$result"
但是如果数组是空的,当我想要""
的时候,我会得到"''"
.我想我可以做一个老式的if
来处理特殊情况下的空array.有谁有更好的吗?