【问题标题】:Extra character added to the output of an array when looping through it循环遍历数组时添加到数组输出中的额外字符
【发布时间】:2014-04-23 14:55:01
【问题描述】:
#!/bin/bash

a=coop; b=(`echo $a | sed 's/\(.\)/\1\n/g'`)
for i in ${b[@]}    
do    
  echo -n $i

  count=$((count+1))

  if [ $count = 2 ]; then    
    echo -e '\e[0;34m'$i
    shift
    echo -ne $*'\e[0m'
  fi
done

输出:cooop(中间是蓝色的)。我想要脚本做的是显示存储在名为“a”的变量中的确切单词。但是正如你所看到的,在“p”旁边添加了另一个“o”。那么我该如何删除多余的字母呢?

【问题讨论】:

  • 您似乎没有描述您真正想要做什么,因为“输出变量的字符”将通过 echo -n $i 完成
  • 我要做的是将蓝色的“o”保留在第三个位置,并删除右侧刚刚添加的多余“o”

标签: bash for-loop scripting


【解决方案1】:

试试这个:

#!/bin/bash

blue='\e[0;34m'
nc='\e[0m'

a=coop
b=($(echo $a | sed 's/\(.\)/\1\n/g'))
count=0
for i in ${b[@]}; do
    if [ $count = 2 ]; then
        echo -ne "${blue}${i}"
        echo -ne "${nc}"
    else
        echo -n "$i"
    fi
    count=$((count+1))
done

【讨论】:

  • 谢谢。它运作良好。我仍然不明白为什么循环外的 count=0 如此重要
  • 设置变量只是一个好习惯。在这种情况下,由于数组的索引为 0,因此会有所帮助
  • 非常感谢。还有一个问题,是否可以为 for 循环的输出分配一个变量?顺便说一句,我确实标记了你的答案:D
  • 谢谢。抱歉,我没听懂这个问题。
  • 所以我已经正确地得到了输出“coop”。现在,把它放到一个变量中......我该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2018-04-07
  • 2017-10-06
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多