[bash] lengte van een string uitvinden?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 13546

Topicstarter
Beste mensen,

Ik ben aan het prutsen met Bash-scripts, en nu wil ik van een bepaalde commandline parameter (die gewoon in een string-var zit) bepalen wat de lengte is. Die mag namelijk niet langer dan 16 tekens zijn... Ik heb al vanalles gezocht en geprobeerd, bijv:
code:
1
lengte=${#$mijnvar}


dat heb ik geloof ik ergens uit de bash manpages, maar het werkt allemaal niet. Is hier niet gewoon een soort standaardfunctie voor? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

${#variable}
Return the length of the variable in characters.
Example:
echo The length of your PATH is ${#PATH}
Zou moeten werken :)

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


Acties:
  • 0 Henk 'm!

  • grep
  • Registratie: Augustus 2001
  • Laatst online: 07-07 22:29

grep

meer begrep...

idd,
je moet dus in jouw voorbeeld wel die $ bij mijnvar weglaten.

Specs | Outcast UT clan | You're going to reap what you sow.


Acties:
  • 0 Henk 'm!

Anoniem: 13546

Topicstarter
Jep... Jullie hebben helemaal gelijk! Die "$" hoort daar niet... Tnx!

Acties:
  • 0 Henk 'm!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Dit kan evt. ook. Werkt waarschijnlijk ook met andere shells:

code:
1
lengte=`expr length "$mijnvar"`

Acties:
  • 0 Henk 'm!

Anoniem: 13055

Dit kan ook (bash only):
code:
1
LENGTH=$(expr $(echo "12345" | wc -c) - 1)


Net zoals dit (compatible met alles wat expr als binary heeft):
code:
1
2
TMP="`echo "12345" | wc -c`"
LENGTH=echo `expr ${TMP} - 1`


:+

[ Voor 30% gewijzigd door Anoniem: 13055 op 12-03-2004 15:04 . Reden: onderste code fragment zou nu echt helemaal bash onafhankelijk moeten zijn ]


Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Anoniem: 13055 schreef op 12 maart 2004 @ 15:01:
Dit kan ook (bash only):
code:
1
LENGTH=$(expr $(echo "12345" | wc -c) - 1)


Net zoals dit (compatible met alles wat expr als binary heeft):
code:
1
2
TMP="`echo "12345" | wc -c`"
LENGTH=echo `expr ${TMP} - 1`


:+
Afhankelijk van je echo zou je echo -n kunnen nemen, zodat je niet je newline-byte hoeft te strippen met die onderste regel:
code:
1
LENGTH="`echo -n "12345" | wc -c`"
Maar dan is het wel bash-onafhankelijk, maar hangt het weer af van of echo de -n of iets vergelijkbaars snapt :)

Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Even offtopic hoor: Zo leuk, 5 manieren voor hetzelfde... wel lastig, dat echo iets dan wel en niet ondersteund. Blijf ik een nadeeltje vinden van linux, al die distro's maken het het "beste".

Voor dit soort systeem dingen moet alles gewoon gelijk zijn vind ik...

Maar ongetwijfeld kan het niet beter volgens de meeste hier ;)

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

pierre-oord schreef op 12 maart 2004 @ 21:11:
Even offtopic hoor: Zo leuk, 5 manieren voor hetzelfde... wel lastig, dat echo iets dan wel en niet ondersteund. Blijf ik een nadeeltje vinden van linux, al die distro's maken het het "beste".

Voor dit soort systeem dingen moet alles gewoon gelijk zijn vind ik...

Maar ongetwijfeld kan het niet beter volgens de meeste hier ;)
Het is toch gewoon makkelijk dat het allemaal werkt :) Het is net welke voorkeur je hebt om te kiezen voor een bepaalde oplossing; maar om nou te stellen dat het slecht is dat er niemand zegt "Die van mij is het beste/de enige" dat vindt ik een beetje cru.... Blijf dan bij Ome Bill die zijn gebruikers verteld wat de beste Browser, email client, text editor, mail client of spreadsheet tool is :+

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

pierre-oord schreef op 12 maart 2004 @ 21:11:
Voor dit soort systeem dingen moet alles gewoon gelijk zijn vind ik...
Vind ik ook. En er is ook maar 1 weg naar Rome. :P
Maar ongetwijfeld kan het niet beter volgens de meeste hier ;)
Vooruit, hier een nog betere: :+
code:
1
LENGTH=`echo $mijnvar |awk '{print length}'`

nou nog een met sed....
code:
1
LENGTH=`echo -n $mijnvar|sed -e 's/./&\n/g'|sed -n -e '='|sed -n -e '$p'`

[ Voor 11% gewijzigd door A_L op 13-03-2004 16:37 . Reden: het is zelfs met sed mogelijk! >:) ]

Pagina: 1