String-Länge in einem Shell-Skript ermitteln

0815Chaot

FreeBSD/sparc64-Tüftler
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.
 
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
 
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.
 
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.
 
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.
 
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.
 
[...]
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:
Zurück
Oben