Gå til innhold

variable variabler, bash?


Anbefalte innlegg

hei, jeg har et lite problem med no bash scripting:

 

[[ -r ./dirs.lst ]] && LINES=$(echo $(wc -l < ./dirs.lst))

                                                                                                                                             

{

i=1

a=1

while [ "$i" -le $LINES ]

do

       read line$i

       let "i+=1"

done

} < ./dirs.lst

while [ "$a" -le $LINES ]

do

       echo $lines$a

       let "a+=1"

done

 

har mase linjer i en fil (skal være mappene i mappa når det blir ferdig), og så vil jeg at hver linje i fila skal ha en egen variabel, som heter line + nr på linja. dette går helt greit. problemet oppstår i den siste while loopen. je g får ikke printa ut variablene som en variabel variabel, hvis dere skjønner. ($line1, $line2 etc fungerer)

("echo" er bare midlertidig, til jeg får det til å funke, så dra en "cat fil" hjelper ikke)

 

-arntfinn

Lenke til kommentar
Videoannonse
Annonse
hei, jeg har et lite problem med no bash scripting:

 


....

....

while [ "$a" -le $LINES ]

do

       echo $lines$a

       let "a+=1"

done

-arntfinn

 

Hei, håper jeg har skjønt deg rett ... Kanskje det fungerer om du bruker

refvar="line$a"

echo ${!refvar}

i stedet for

echo $lines$a    

Sistnevnte viser vel kun "$a" fordi du egentlig ikke har definert variabelen "lines", mens førstnevnte skal vise til innholdet i variabelen med navnet "line$a"...

 

Men hvorfor bruker du ikke arrays? Det blir litt enklere (og mer intuitivt) da...

Lenke til kommentar

sånn, disse arraysene var jo geniale :) altfor lenge siden jeg har drevet med slikt. gamle kunnskaper kommer frem igjen.. ok, nok babbel :p

 

#!/bin/bash

ls --color=none > dirs.lst

[[ -r dirs.lst ]] && LINES=$(echo $(wc -l < dirs.lst))

rm dirs.lst

dirs=( $(ls --color=none) )

i=0

while [ "$i" -le $LINES ]; do

       if [ "${dirs[$i]}" != "" -a -d "${dirs[$i]}" ]; then echo ${dirs[$i]}; fi

       let "i+=1"

done



exit 0

 

har du no annen smart jeg kan bytte ut her.. f.eks finne hvor mange ting det er i .?

 

takk for hjelp nok en gang, dette var mye smartere og penere enn det andre mølet jeg skreiv ;)

 

edit: når jeg ser på posten her, så ser det ut som jeg har gjor detta med "ls" to ganger, som egentlig er unødvendig.. men jeg får fikse det etter middag og stil hehe

Lenke til kommentar

har du no annen smart jeg kan bytte ut her.. f.eks finne hvor mange ting det er i .?

 

To tips: Følgende gir deg KUN katalogene i den katalogen du står i:


find -type d -maxdepth 1 -print

som du kan bytte ut "ls" kommandoen med (Her fins det sikkert bedre metoder, men denne funker). Ellers gir følgende deg antall elementer i arrayet "dir"


${#dir[*]}

Men nå begynner det å grense til flisespikkeri :wink:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...