Newsgroup: it.comp.os.linux.iniziare
Titolo: [BASH] operazioni su stringhe

Ho trovato su 
http://it.tldp.org/guide/abs/refcards.html
 una serie di
reference molto pratica (da stampare e attaccare accanto al monitor) e ho
provato a fare un paio di esperimenti
ad esempio, per ottenere il primo carattere di una stringa si puo' usare
${stringa::1}
ma per leggere l' ultimo?
ho trovato questo metodo, ma mi sembra parecchio arzigogolato
${stringa:$((${#stringa}-1))}
cioe' vedo di quanti caratteri e' composta stringa, ci sotraggo 1 e inizio
a leggere da li' (non metto la lunghezza perche' tanto la stringa dopo e'
finita...)
Non c' e' qualcosa di piu' diretto?
-- 
quando una goccia di rugiada svanisce 
un fiume di metallo 
credere d'estate

 ma per leggere l' ultimo?
${parameter:offset:length}
              Substring Expansion.  Expands to up to length characters
              of parameter starting at the character specified by
              offset.  If length is omitted, expands to the substring
              of parameter starting at the character specified by
              offset.  length and offset are arithmetic expressions
              (see ARITHMETIC EVALUATION below).  length must evaluate
              to a number greater than or equal to zero.
,----------------------------------------------------------------------
|             If offset evaluates to a number less than zero, the
|             value is used as an offset from the end of the value of
|             parameter.
`----------------------------------------------------------------------
21:36:01 sanmartino:~$ a=12345 
21:36:09 sanmartino:~$ echo ${a:$(( -1)):1}
5
21:36:10 sanmartino:~$ echo ${a:-1:1}
12345
21:37:03 sanmartino:~$ 
la parola chiave: "evaluates"
-- 
Vorrei andare a lavorare in Sicilia, a max 15 km dal mare. Con chi 
devo parlare? Col capomafia distrettuale? Oppure bisogna sporcarsi le 
mani e fare la tessera di FI?                      -- Marvin,  in IFQ

 la parola chiave: "evaluates"
d' oh >_<
ecco perche' non fungeva con "-1" direttamente!
ma non capisco, che problema ci sarebbe stato a permettere direttamente l'
uso dei numeri negativi?
-- 
quando l'oscura signora ricompare 
vivere 
in un regno di neve 
concepire d'inverno

 Non c' e' qualcosa di piu' diretto?
No, gli script shell non sono pensati per manipolare i singoli caratteri
delle stringhe, ma per procedere a colpi di sostituzione ed espansione per
manipolare l'intera o parziale stringa.
In sintesi per lavorare nel '''dettaglio''' bisogna usare altri linguaggi,
awk, python, perl, ecc. .
P.S. Con gli script shell bisogna invertire il processo mentale (come posso
cambiare le mie richieste in modo che siano trattate agevolmente dai
comandi (di alto livello e/o trattamento ''blocchi di testo'') della shell.
O se preferisci 'questo lo faccio cosi perchè poi c'è questo comando
che ...' e non 'mi serve questa istruzione allora la emulo con i comandi
della shell ...'

 direttamente l' uso dei numeri negativi?
credo di aver raggiunto il limite delle mie competenze con la risposta
precedente... la cosa migliore per saperne di piu' e' chiedere in
comp.unix.shell

 12345
]zac[
Ueila, e questa da dove spunta? molte interessante, grazie.
Ricambio con una semplificazione:
$ a=cccio; echo ${a: -2:2}
io
^^^ OK
$ a=cccio; echo ${a:-2:2}
cccio
^^^ KO
Lo spazio, l'ultima frontiera ...

> direttamente l' uso dei numeri negativi?
]zac[
Ri-ricambio aggiungendo questo:
${parameter-default}, ${parameter:-default}
If parameter not set, use default.
quindi ' :- ' vengono interpretati come un altro comando.

 quindi ' :- ' vengono interpretati come un altro comando.
d' oh!-issimo!!!!
ecco cos' era!
baciamo le mani!!!
-- 
quando un'ombra brucia 
solitudine d'autunno 
un dolore di luce