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

use*_*908 1 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
Run Code Online (Sandbox Code Playgroud)

Wil*_*ill 5

因此,我们可以做到这一点的一种方法是模拟join()许多语言提供的功能:

function join()
{
    local IFS="$1"
    shift
    echo "$*"
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以调用:

READINGS="[$(join "," "${field[@]})"]"
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

$ MY_ARRAY=("one" "two" "three")
$ join "," "${MY_ARRAY[@]}"
one,two,three
Run Code Online (Sandbox Code Playgroud)

这是通过更改 Bash 的内部字段分隔符来实现的。$*用于使用$IFS作为分隔符来扩展所有参数。

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

READINGS="[$(IFS=","; echo "${field[*]}")]"
Run Code Online (Sandbox Code Playgroud)