2016-08-31 1 views
0

Das Array in den Feldern seperator gibt diese Art von Zeitcodes (Stunden: Minuten: Sekunden).Doppelpunkt im Zeitstempel verwendet gibt für Variable einen Syntaxfehler

01:00:00 

Wie ich habe dies in den folgenden Code:

maximum=25 
count=0 
countrow=1 

while [ $count -lt $maximum ]; do 
    let start$countrow="${fields[$count]}" 
     count=$(($count+1)) 
    let end$countrow="${fields[$count]}" 
     count=$(($count+1)) 
     countrow=$(($countrow+1)) 
done 

Sollte die Ausgabe als geben:

start1="01:00:00" 
start2="02:00:00" 

Aber gibt mir diese Fehlermeldung:

start1=01:00:00: syntax error in expression (error token is ":00:00") 

I Ich habe versucht, viele Möglichkeiten, ich denke, der Doppelpunkt ist das Problem em aber weiß nicht, wie man das im Code "umgeht"?

+1

Mathematische Kontexte wirken auf Ganzzahlen. Ein Wert mit Doppelpunkten ist keine Ganzzahl. –

+0

... übrigens, 'start $ countrow = ...' ist nicht gerade das beste Verfahren für die indirekte Zuweisung. Siehe [den relevanten Abschnitt von BashFAQ # 6] (http://mywiki.wooledge.org/BashFAQ/006#Assigning_indirect.2Freference_variables) –

+0

Außerdem ist Ihr Code derzeit kein MCVE - ich kann es nicht kopieren und einfügen und die exakt gleiche Ausgabe erhalten. Bitte weisen Sie Ihr 'fields' Array auf eine Art und Weise zu, die Sie in der Praxis verwenden. –

Antwort

0

Es ist nicht klar, was Sie (eine englischsprachige Beschreibung des Problems Sie versuchen zu lösen helfen würde) erreichen wollen davon aus, aber, dass Sie so etwas wie die folgenden haben:

fields=(01:00:00 02:30:00 03:15:45) 

... Sie können durch sie durchlaufen wie folgt:

for field_idx in "${!fields[@]}"; do 

    # read field into hour/minute/second variables 
    IFS=: read -r h m s <<<"${fields[$field_idx]}" 

    # put time into start$idx one hour after the field entry 
    printf -v "start$((field_idx + 1))" '%02d:%02d:%02d' \ 
    "$((${h#0} + 1))" "$m" "$s" 

done 

... also Variablen „Start1“, „start2“ und „start3“, die jeweils mit einer Zeit um eine Stunde mehr als die in der gegebenen Schaffung verbundener fields Eintrag.

Die ${h#0} Syntax stripet jede führende 0, um zu verhindern, dass die Zahlen als oktal analysiert werden (was 08 und 09 ungültig machen würde).

Verwandte Themen