如何将我的数组转换为Bash中的字符串?

时间:2016-03-30 22:34:46

标签: arrays string bash

这是我的Bash脚本,它从温度传感器读取值并将它们显示在一行中。我想用逗号分隔我的数组元素,比如这个例子:[1,2,3,5],然后用这个字符串替换另一个文件中存在的一行。

temp.sh

#!/bin/bash
for ((i=0 ; 12 - $i ; i++))
  do
  x=$(cat /sys/bus/w1/devices/28-0000075292ed/w1_slave | grep "t=" | awk -F "t=" '{print $2/1000}')
  field[$i]=$x
  echo "${field[$i]}"
done | column

2 个答案:

答案 0 :(得分:4)

所以我们可以这样做的一种方法是模仿许多语言提供的join()功能:

function join()
{
    local IFS="$1"
    shift
    echo "$*"
}

然后我们可以致电:

READINGS="[$(join "," "${field[@]})"]"

以下是一个例子:

$ MY_ARRAY=("one" "two" "three")
$ join "," "${MY_ARRAY[@]}"
one,two,three

这可以通过改变Bash的Internal Field Separator来实现。 $*用于使用$IFS作为分隔符扩展所有参数。

我们也可以避免使用join函数,只需这样做:

READINGS="[$(IFS=","; echo "${field[*]}")]"

答案 1 :(得分:1)

谢谢,我找到了解决方案

#!/bin/bash
f="myArray_a = ["
for ((i=0 ; 12 - $i ; i++))
  do
  x=$(cat /sys/bus/w1/devices/28-0000075292ed/w1_slave | grep "t=" | awk - F "t=" '{print $2/1000}')
  if [ $i -eq 11 ]
  then
  x=$(printf %.3f] $x)
  f="$f $x"
  echo "$f"
  else
  x=$(printf %.3f, $x)
  f="$f $x"
  fi



done | column