[Risolto][BASH] nomi interpretati per le variabili

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
jimbo jambo2
Prode Principiante
Messaggi: 64
Iscrizione: martedì 8 gennaio 2013, 19:02
Desktop: Unity
Distribuzione: Ubuntu 14.04.2 LTS x86_64

[Risolto][BASH] nomi interpretati per le variabili

Messaggio da jimbo jambo2 »

Sto scrivendo uno script che dovrebbe accettare :bash: parametri stringhe in numero indefinito.
Dato che questi parametri li devo processare in base al loro contenuto e non alla loro posizione, mi serve una routine di inizializzazione per delle variabili che li contengano.

A tal proposito sto cercando di rendere automatizzabile la dichiarazione di nuove variabili. Ma in giro per internet e sulle varie guide di scripting che ho sul pc non ho trovato granché.

Il codice che ho scritto non produce esiti soddisfacenti.

Codice: Seleziona tutto

1    if [ "$#" -gt 0 ] then
2    for arg in `seq $#`
3    do
4         nomeVariabile="parametro$arg"
5         "$nomeVariabile"=$1
6         shift
7    done
8
9    #qui le variabili create nel ciclo vengono utilizzate
10  
11   else   echo"No Arguments"
12   fi
13   exit
Quando scrivo

Codice: Seleziona tutto

5    "$nomeVariabile"=$1
vorrei che venisse inizializzata una nuova variabile, il cui nome è il contenuto di $nomeVariabile, al valore $1.
Sicuramente un modo c'è, ma non essendo ancora molto pratico, non riesco neanche a gestire decentemente gli array, che probabilmente mi potrebbero aiutare in quest'occasione.
Qualcuno mi può istruire?

Grazie ;D
Ultima modifica di jimbo jambo2 il sabato 20 giugno 2015, 20:18, modificato 1 volta in totale.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [BASH] nomi interpretati per le variabili

Messaggio da crap0101 »

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ cat x.sh
#!/bin/bash

eval "$1=uno"
declare $2=due
echo $x
echo $y
crap0101@orange:/tmp/FOO$ bash x.sh x y
uno
due
comunque sì, meglio usare degli array, anche perchè se devi creare un numero indefinito (e magari grande) di variabili... come le nomini? e soprattutto come ti riferisci a loro nel codice se hanno un nome univoco che non conosci a priori? Non che non si possa fare come dici, ma è *molto* scomodo e complica inutilmente tutto il codice successivo che scriverai.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: [BASH] nomi interpretati per le variabili

Messaggio da vbextreme »

non è che si è capito molto, oppure sto ancora dormendo......
prova a guardare bigt alla riga 82 c'è il parser dei parametri.
Easy framework per il linguaggio C.
vbextreme hack your life
jimbo jambo2
Prode Principiante
Messaggi: 64
Iscrizione: martedì 8 gennaio 2013, 19:02
Desktop: Unity
Distribuzione: Ubuntu 14.04.2 LTS x86_64

Re: [BASH] nomi interpretati per le variabili

Messaggio da jimbo jambo2 »

crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4769065#p4769065][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ cat x.sh
#!/bin/bash

eval "$1=uno"
declare $2=due
echo $x
echo $y
crap0101@orange:/tmp/FOO$ bash x.sh x y
uno
due
Scusa crap, non l'ho capito sto script :ciao:
comunque sì, meglio usare degli array, anche perchè se devi creare un numero indefinito (e magari grande) di variabili... come le nomini? e soprattutto come ti riferisci a loro nel codice se hanno un nome univoco che non conosci a priori? Non che non si possa fare come dici, ma è *molto* scomodo e complica inutilmente tutto il codice successivo che scriverai.
Uno dei fondamenti di Unix indica che alla complessità algoritmica è di gran lunga preferibile la complessità di strutture dati.. quindi appena tornato da un esame mi sto studiando questi complicatissimi array bash :D
vbextreme ha scritto: prova a guardare bigt alla riga 82 c'è il parser dei parametri.
Se non ho inteso male in quel ciclo inizializzi le variabili, le quali hanno però nomi ben precisi.

L'obiettivo della mia ricerca invece è quello di creare nuove variabili con nomi sempre diversi per esempio $variabile1, $variabile2, $variabile3.. etc dove quel numero viene incrementato automaticamente. Anche se probabilmente il modo migliore per realizzare questa cosa è utilizzare appunto gli array... che tra un re-edit e l'altro mi hanno risolto lo script. :lol:
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [BASH] nomi interpretati per le variabili

Messaggio da crap0101 »

jimbo jambo2 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4769331#p4769331][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4769065#p4769065][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ cat x.sh
#!/bin/bash

eval "$1=uno"
declare $2=due
echo $x
echo $y
crap0101@orange:/tmp/FOO$ bash x.sh x y
uno
due
Scusa crap, non l'ho capito sto script :ciao:
è un esempio di quello che volevi fare, ovvero creare variabili con nomi arbitrari a runtime. In quell'esempio ho usato i nomi passati come parametri allo script, ma niente ti impedisce di fare diversamente, tipo utilizzare nomi creati in sequenza come dici qui:
L'obiettivo della mia ricerca invece è quello di creare nuove variabili con nomi sempre diversi per esempio $variabile1, $variabile2, $variabile3.. etc dove quel numero viene incrementato automaticamente. Anche se probabilmente il modo migliore per realizzare questa cosa è utilizzare appunto gli array... che tra un re-edit e l'altro mi hanno risolto lo script. :lol:
ovvero:

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ cat x.sh
#!/bin/bash

t=$#
for n in `seq $#`; do
    eval "var_$n=$1"
    shift
done

for n in `seq $t`; do
    echo "var_$n = $(eval echo \$var_$n)"
done
crap0101@orange:/tmp/FOO$ bash x.sh a b c
var_1 = a
var_2 = b
var_3 = c
ma come dicevo con gli array è molto più comodo, e se hai risolto in quel modo, meglio!
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
jimbo jambo2
Prode Principiante
Messaggi: 64
Iscrizione: martedì 8 gennaio 2013, 19:02
Desktop: Unity
Distribuzione: Ubuntu 14.04.2 LTS x86_64

Re: [BASH] nomi interpretati per le variabili

Messaggio da jimbo jambo2 »

crap0101 ha scritto:
jimbo jambo2 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4769331#p4769331][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:

Codice: Seleziona tutto

crap0101@orange:/tmp/FOO$ cat x.sh
#!/bin/bash

t=$#
for n in `seq $#`; do
    eval "var_$n=$1"
    shift
done

for n in `seq $t`; do
    echo "var_$n = $(eval echo \$var_$n)"
done

crap0101@orange:/tmp/FOO$ bash x.sh a b c
var_1 = a
var_2 = b
var_3 = c
Grazie Crap, sai quanto ci camperò con quell'eval ?!?! :D
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti