• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Ausgabe von Variable stimmt nicht

chappert

Hacker
Hy,

folgendes Problem:
es existiert eine Datei (test) mit ner Zahlenfolge drin z.b 016
wenn ich jetzt über ein script sage cat /path/test ist die Ausgabe 016 logisch
ABER
wenn ich im script sage

TEST=`cat /path/test`
echo $TEST

kommt nicht 016 raus sonder 14 warum? :irre:
 
A

Anonymous

Gast
chappert schrieb:
wenn ich im script sage

TEST=`cat /path/test`
echo $TEST

kommt nicht 016 raus sonder 14 warum? :irre:
Weil dann durch die führende Null die Zahl als Oktalzahl interpretiert wird. Deine Testvariable scheint vom Type Integer zu sein.

Code:
priv0001:~ # TEST="016"
priv0001:~ # echo $TEST
016
priv0001:~ # typeset -i TEST
priv0001:~ # TEST="016"
priv0001:~ # echo $TEST
14


robi
 
OP
C

chappert

Hacker
und wie ist die lösung?
oder was muss ich machen?

ich möchte aber mit der zahl dann rechenoperatinen durchführen können
 
A

Anonymous

Gast
chappert schrieb:
und wie ist die lösung?
oder was muss ich machen?
entweder verhindern dass da vor einer Zahl eine Null steht, oder verhindern das diese Null interpretiert wird.
Der ersten Variante ist Vorang zu gewähren, weil sonst in einer Späteren Rechenoperation die Bash wieder auf die Idee kommen könnte das als Oktalzahl zu interpretieren.

Eine Möglichkeit zum Beispiel eine Eingabeprüfung und Anpassung mittels sed oder awk
Code:
typeset -i TEST
TEST=`echo 0123  | sed 's/0*\([0-9]*\)[^0-9]*$/\1/' `
echo $TEST

robi
 

byron1778

Hacker
Du musst das Ganze als integer deklarieren.

Bsp:

Code:
#!/bin/sh

a=2334               # $a ist ein Integer
let "a += 1"         # $a ist nun "2335" und ein Integer
echo -e $a
 
A

Anonymous

Gast
byron1778 schrieb:
Code:
#!/bin/sh

a=2334               # $a ist ein Integer
let "a += 1"         # $a ist nun "2335" und ein Integer
echo -e $a
Das Problem ist die Null am Anfang
Code:
priv0001:~ # a=0334                 # $a ist ein Integer
priv0001:~ # let "a += 1"            # $a ist nun "0335" und ein Integer
priv0001:~ # echo -e $a
221
 
Oben