【问题标题】:Bash append to end of array elementBash 附加到数组元素的末尾
【发布时间】:2017-10-20 02:25:49
【问题描述】:

我有一个命令,当我运行它时,它会输出一个看起来像这样的表;

Id        Name                                  File                                  OS          Version   Annotation   
10     MICKEY     [MICKEY_01_001] MICKEY/MICKEY.vmx       windows8Server64Guest   vmx-08    
13     DONALD     [DONALD_01_001] DONALD/DONALD.vmx       windows7Server64Guest   vmx-10
2      GOOFY      [GOOFY_01_001] GOOFY/GOOFY.vmx       windows9Server64Guest   vmx-09

然后我将表存储在一个数组中调用TABLE并列出TABLE数组,代码如下所示;

readarray -t TABLE <<< "$(command)"
IFS='|'
for i in "${TABLE[@]}"
do
  echo $I
done

如何追加到每个数组元素的末尾?我希望表格如下所示;

Id        Name                                  File                                  OS          Version   Annotation    
10     MICKEY     [MICKEY_01_001] MICKEY/MICKEY.vmx       windows8Server64Guest   vmx-08     ON    
13     DONALD     [DONALD_01_001] DONALD/DONALD.vmx       windows7Server64Guest   vmx-10.    OFF    
2      GOOFY      [GOOFY_01_001] GOOFY/GOOFY.vmx       windows9Server64Guest   vmx-09.    ON

【问题讨论】:

标签: arrays bash


【解决方案1】:

如果你想在你的数组中添加 ON 或 OFF

readarray -t TABLE <<< "$(command)"
#IFS='|' why ?
for ((i=1;i<"${#TABLE[@]}";i++))
# start i=1 to preserve header
do
  # condition to ON or OFF
  [ "${a:=OFF}" = 'ON' ] &&a='OFF'||a='ON'
  TABLE["$i"]="${TABLE["$i"]} $a"
done
for i in "${TABLE[@]}"
do
  echo "$i"
done

【讨论】:

  • 感谢您的建议。您的建议并没有像我希望的那样工作,它在数组元素的开头附加 ON 或 OFF 并覆盖 ID 字段。我试图在数组元素字符串的末尾附加 ON 或 OFF。有什么建议可以实现吗?
  • 我不明白。在家里,我将“$(command)”替换为“$(cat infile)”,并且 ON 和 OFF 出现在每个数组元素的末尾,并且不会覆盖 ID 字段。
  • 感谢您的帮助和建议,我想一定是我的环境。您的解决方案是最符合我要求的。再次感谢。
【解决方案2】:

"$(command)" 命令有什么作用?我们是否应该假设,输出的一行 = 一个字符串 = 数组的一个元素?如果是这样,那么这应该适合你:

readarray -t TABLE <<< "$(command)"
IFS='|'
for i in "${TABLE[@]}"
do
  if <condition_for_on_met>; then
     echo "$i ON"
  elif <condition_for_off_met>;then
     echo  "$i OFF"
  else
     echo  "$i"
  fi
done

但这是一个普遍的答案。您可以通过向我们展示您的输入是什么以及在打印之前如何处理它来改进您的问题。

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 2023-03-07
    • 1970-01-01
    • 2017-03-03
    • 2012-09-12
    • 2014-11-15
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多