【问题标题】:Replace blank spaces in an array in bash替换bash中数组中的空格
【发布时间】:2015-07-29 10:40:29
【问题描述】:

我必须替换 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[0] = one 不是作业。

标签: arrays bash shell replace


【解决方案1】:
array=('one' 'two three' 'four five') # initial assignment
array=( "${array[@]// /_}" )          # perform expansion on all array members at once
printf '%s\n' "${array[@]}"           # print result

【讨论】:

    【解决方案2】:

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

    ${varName//Pattern/Replacement}
    

    用Replacement替换所有匹配的Pattern。

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

    您现在应该可以简单地遍历数组并用您想要的任何内容替换空格。

    【讨论】:

      【解决方案3】:
      $!/bin/sh
      
      array=('one' 'two three' 'four five')
      
      for i in "${!array[@]}"
      do 
          array[$i]=${array[$i]/ /_}
      done
      
      echo ${array[@]}
      

      【讨论】:

      • 现在好多了,虽然echo 的使用是不幸的,尤其是没有引用的参数。 printf '%q\n' "${array[@]}" 将更有效地演示数组元素之间的边界在哪里,因为 echo 不会在视觉上区分带有空格的参数和两个单独的参数(省略引号意味着否则会有在字符串拆分阶段,一个带空格的参数会转换为多个参数)。
      • 最后一期 -- /bin/sh shebang 不保证将使用带有数组的 shell 来运行此脚本。
      猜你喜欢
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2016-06-16
      • 2018-12-26
      相关资源
      最近更新 更多