首页 > 解决方案 > 不能用参数扩展替换字符串中的空格字符

问题描述

我想通过对它们使用参数扩展语法来连接数组元素,并期望以下代码可以工作:

declare -a nums=( {1..10} )
echo ${nums[@]// /,}
1 2 3 4 5 6 7 8 9 10
#but
echo ${nums[@]//1/,}
, 2 3 4 5 6 7 8 9 10

我可以在空白处进行替换吗?

标签: arraysstringbash

解决方案


${nums[@]}"不是一个字符串,而是一个由 10 个数字组成的数组,这就是用逗号替换空格不起作用的原因,因为数组中没有空格。

您可以在字符串中获取数组内容并进行字符串替换:

declare -a nums=( 1 2 3 4 5 6 7 8 9 10 )
s="${nums[*]}"
echo "${s// /,}"
1,2,3,4,5,6,7,8,9,10

或一个班轮:

IFS=, && printf '%s\n' "${nums[*]}" && unset IFS

推荐阅读