• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

String-Länge in einem Shell-Skript ermitteln

0815Chaot

FreeBSD/sparc64-Tüftler
Themenstarter #1
Hallo,

ich suche mir hier gerade einen Wolf, finde aber einfach nicht das passende Programm. Wie kann ich die Länge eines Strings in einem Bash-Skript unter FreeBSD ausgeben lassen? Gibt es da schon was fertiges im Basis-System?

Aus diversen Gründen möchte ich es gerne vermeiden, selbst ein C-Programm, das strlen(3) verwendet, für diesen Zweck zu schreiben. Ich würde das gerne mit FreeBSD-Bordmitteln lösen. So etwas simples gibt es bestimmt schon.

Danke.
 

kazcor

Reigstreed Usre
#3
intern gibbets das auch ...

${#parameter}
The length in characters of the value of parameter is substituted. If parameter is * or @, the value substituted is the number of positional parameters. If parameter is an array name subscripted by * or @, the value substituted is the number of elements in the array.

> echo $TERM
xterm
> echo ${#TERM]
5
 

0815Chaot

FreeBSD/sparc64-Tüftler
Themenstarter #4
Ich bedanke mich für die Antworten.

@sebbo:

Kann es sein, daß expr bei deiner Shell ein Builtin ist? Laut der Manpage kennt expr(1) keine Option "length".
Code:
# echo `expr length $PRINTER`
expr: syntax error
# type expr
expr is /bin/expr
Das expr im Basis-System kann es jedenfalls nicht.

@kazcor:

Danke, das funktioniert bei der Bash einwandfrei.
 

0815Chaot

FreeBSD/sparc64-Tüftler
Themenstarter #6
Ich will ja auch ein Bash-Skript schreiben:
Code:
# echo $BASH_VERSION
2.05b.0(1)-release
# echo `expr length $PATH`
expr: syntax error
Und expr ist, zumindest bei meiner Bash, wie oben gezeigt, kein Builtin. Es bleibt also höchstens noch die Vermutung, daß du ein anderes System benutzt, dessen /bin/expr die von dir genannte Option unterstützt. Ich benutze, wie erwähnt, FreeBSD. Hier momentan 4.8-Release.

Was sagt denn bei dir ein uname -sr ; type expr - ich wüßte gerne rein interessehalber, auf welchem System /bin/expr das kann.
 

sebbo

aka noganex
#7
Linux 2.6.5 und Release 5.2
Beides /bin/expr.

Merkwuerdig dass das bei dir nicht geht... Ich mach das schon seit gut einem halben Jahr mit expr.

Aber eigentlich wuerde ich die Version von kazcor bevorzugen, da dort ein Subshell aufruf vermieden wird.
 

0815Chaot

FreeBSD/sparc64-Tüftler
Themenstarter #8
Linux 2.6.5 und Release 5.2
Beides /bin/expr.
Merkwuerdig dass das bei dir nicht geht...
Naja gut, FreeBSD 4.8 ist kein FreeBSD 5.2 und schon gar kein Linux 2.6.5. Da kann es schon Unterschiede im Basis-System geben.

Aber eigentlich wuerde ich die Version von kazcor bevorzugen, da dort ein Subshell aufruf vermieden wird.
Ich auch, weil ich noch sehr viele 4.x-Kisten habe, auf denen das Skript auch funktionieren muß. Da ist ${#} wohl die einzige Möglichkeit.
 
#9
[...]
Merkwuerdig dass das bei dir nicht geht... Ich mach das schon seit gut einem halben Jahr mit expr.
[...]
Es funktioniert zum Beispiel dann nicht, wenn die Variable gar nicht definiert ist.
Bash:
b.storck@linux-system: ~ $ echo "$PRINTER"

b.storck@linux-system: ~ $ echo "${#PRINTER}"
0
b.storck@linux-system: ~ $ echo "$(expr length $PRINTER)"
expr: Syntaxfehler

b.storck@linux-system: ~ $

Wenn man allerdings den Inhalt der gefragten Variable sauber als String markiert, dann klappt es:
Bash:
echo "$(expr length "$PRINTER")"
expr erwartet eben einen String und wenn ihm stattdessen nichts übergeben wird, dann wirft das Programm einen Syntaxfehler aus.
 
Zuletzt bearbeitet: