2016-03-30 8 views
1

Dies ist mein Bash-Skript, das Werte von einem Temperatursensor liest und sie in einer Linie anzeigt. Ich möchte meine Array-Elemente durch ein Komma trennen, wie dieses Beispiel: [1,2,3,5], um dann eine Zeile, die in einer anderen Datei existiert, durch diese Zeichenfolge zu ersetzen.Wie konvertiert man mein Array in Bash in eine Zeichenkette?

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 
+0

Ist 'column' hier etwas zu tun? Gibt das "Echo" mehr als einen Wert in einer gegebenen Zeile aus? Wie sieht die Ausgabe dieses Befehls genau aus? Was ist, wenn Sie 'Spalte' nicht verwenden? –

+0

Warum proben Sie jedes Mal das gleiche Gerät durch die Schleife? –

+0

@EtanReisner Ich gehe davon aus, dass ich mehrmals Temperaturen bekomme und den Wert oder etwas Ähnliches mittle. Obwohl viele dieser Sensoren nicht gerne gelesen werden, ohne dazwischen zu schlafen. – Will

Antwort

1

Danke ich habe eine Lösung gefunden

#!/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 
4

So eine Art, wie wir dies die join() Funktionalität von vielen Sprachen zur Verfügung zu emulieren ist tun könnte:

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

Dann können wir nennen:

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

Hier ist ein Beispiel:

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

Dies funktioniert, indem Bash Internal Field Separator ändern. $* wird verwendet, um alle Argumente mit dem $IFS als Trennzeichen zu erweitern.

Wir könnten auch die join Funktion vermeiden und tun Sie es einfach dies wie:

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

, wenn ich es versuchte, es zeigt das gleiche Ergebnis wie ohne IFS: pi @ Raspberry Pi: ~ $ ./temp. sh 21.437 \t 21.437 \t 21.437 \t 21.437 \t 21.437 \t 21.437 \t 21.437 \t 21.437 \t 21.5 \t 21.5 \t 21.5 \t 21.5 – user5996908

+0

Haben beide Methoden nicht funktioniert? – Will

+0

Wenn nicht, versuch, deinen neuen Code in einer Bearbeitung zu der Frage zu posten und ich werde einen Blick darauf werfen. – Will

Verwandte Themen