Arrays 替换bash中数组中的空格

Arrays 替换bash中数组中的空格,arrays,bash,shell,replace,Arrays,Bash,Shell,Replace,我必须在shell脚本中替换数组中所有值的空格。所以,我需要做一个如下的数组: $ array[0]="one" $ array[1]="two three" $ array[2]="four five" $ array[0]="one" $ array[1]="two!three" $ array[2]="four!five" 看起来像这样: $ array[0]="one" $ array[1]="two three" $ array[2]="four five" $ array[0]

我必须在shell脚本中替换数组中所有值的空格。所以,我需要做一个如下的数组:

$ array[0]="one"
$ array[1]="two three"
$ array[2]="four five"
$ array[0]="one"
$ array[1]="two!three"
$ array[2]="four!five"
看起来像这样:

$ array[0]="one"
$ array[1]="two three"
$ array[2]="four five"
$ array[0]="one"
$ array[1]="two!three"
$ array[2]="four!five"

使用循环或其他内容将每个空格替换为另一个字符,而不是逐个值进行更改。

Bash shell支持通过替换来查找和替换字符串操作。语法如下:

${varName//Pattern/Replacement}
用替换替换替换所有匹配的图案

x="    This    is      a      test   "
## replace all spaces with * ####
echo "${x// /*}"

现在,您应该能够简单地在数组中循环并替换任意空格wo。

Bash shell支持通过替换字符串操作进行查找和替换。语法如下:

${varName//Pattern/Replacement}
array=('one' 'two three' 'four five') # initial assignment
array=( "${array[@]// /_}" )          # perform expansion on all array members at once
printf '%s\n' "${array[@]}"           # print result
用替换替换替换所有匹配的图案

x="    This    is      a      test   "
## replace all spaces with * ####
echo "${x// /*}"

现在,您应该可以简单地在数组中循环,并用您想要的任何内容替换空格wo。

您的意思是数组[0]=1,也许?数组[0]=1不是赋值。你的意思是数组[0]=1,可能吧?数组[0]=1不是赋值。现在好多了,尽管使用echo是不幸的,尤其是对于不带引号的参数。printf'%q\n'${array[@]}将更有效地演示数组元素之间的边界在何处,由于echo在视觉上无法区分带空格的参数和两个单独的参数,因此省略引号意味着在字符串拆分阶段,原本是带空格的一个参数的内容会转换为多个参数。最后一个问题是,/bin/sh shebang不能保证有一个shellwith数组将用于运行此脚本。现在好多了,尽管使用echo是不幸的,尤其是对于无引号的参数。printf'%q\n'${array[@]}将更有效地演示数组元素之间的边界在何处,由于echo在视觉上无法区分带空格的参数和两个单独的参数,因此省略引号意味着在字符串拆分阶段,原本是带空格的一个参数的内容会转换为多个参数。最后一个问题是,/bin/sh shebang不能保证有一个shell将使用with数组来运行此脚本。
array=('one' 'two three' 'four five') # initial assignment
array=( "${array[@]// /_}" )          # perform expansion on all array members at once
printf '%s\n' "${array[@]}"           # print result