Newsgroup: it.comp.os.linux.software
Titolo: Sintassi evidenziata con Mc (mcedit)

[ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]
 
 
Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
sfugge qualcosa (facile)?
 
Ecco, per chiarezza, come ad esempio mi tocca scrivere:
---------
#!/bin/bash
 
t_UTC="$1"
 
ANNI="$(echo \
"$(date -u "+%Y - 1970" --date=@${t_UTC})" | bc -l)"
--------------
 
altrimenti, se non vado inutilmente a capo con \, l'eventuale
seguito resta come fosse tutto commentato.
 
 
[ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]
 
-- 
Yoda
 


Cosa dovrebbe calcolare il tuo script?
 
Quale argomento gli dai?
 
t_UTC che è impostato a primo argomento cosa sarebbe?
 
Fai un esempio di utilizzo dello script: come lo lanci da terminale.

 ANNI="$(echo \
       ^--virgolette aperte> "$(date -u "+%Y - 1970" --date=@${t_UTC})"
| bc -l)"
  ^--virgolette chiuse
 
"a"b"c"
 
Significa che "a" e "c" sono tra virgolette,
non che 'a"b"c' e` tra virgolette ed anche 'b'...
 
Che poi, quante virgolette metti?
 
bye,
 
-- 
 
piergiorgio

 Fai un esempio di utilizzo dello script: come lo lanci da terminale.
 
$: ./pippo 6546418548412028870
 
Mi da' gli anni civili, son molto difficili da calcolare.. se faccio
all'antica: 1 anno = 365 giorni e quattro ore, c'e' errore anche
rispetto all'anno tropico ciao comunque lo scherzetto mcedit e' da
molto che me lo fa e con molti altri script del tutto differenti
 
-- 
Yoda
 

Addi' 07 gen 2021 22:16:40, Piergiorgio Sartor scrive:

Si' (e no!), ma in ogni caso quello che non capiso e' perche' a bash
il comando arriva corretto anche senza l'a capo ed invece mcedit con
l'a capo non segue piu' il tuo schema-ragionamento e la smette di
commentare nel seguito.
 
D'altra parte m'ero distratto, perche' a date la direttiva "+%Y -
1970" posso metterla (molto meglio) tra apici: '+%Y - 1970', pero'
anche cosi' per mcedit non cambia nulla (ho provato adesso).
 
Pertanto vediamolo punto per punto:
ANNI="$(echo "$(date -u '+%Y - 1970' --date=@${t_UTC})" | bc -l)"
ebbene:
 
1. l'output di date e' ad esempio:
2023 - 1970
dunque e' obbligatorio passarlo a bc con virgolette:
"$(date -u '+%Y - 1970' --date=@${t_UTC})"
doppie perche' interviene la variabile t_UTC.
 
2. Resta allora soltanto l'output di bc.. dici che e' sbagliato
metterle o in ogni caso che son troppe? Be', in questo caso e' un
numero, ma considera che in altri casi potrebbero esserci spazi
(ho scritto-chiesto adesso, ma e' da molto che mcedit mi fa questo
scherzetto anche con comandi dove le virgolette sono assolutamente
indispensabili) ciao
 
-- 
Yoda
 


L'esempio non è calzante, l'argomento è troppo grande.
Quando si chiede e viene richiesto un esempio meglio
sempre fare un esempio cosrretto. Per capirsi dar modo
di fare una prova e poter verificare precisamente.
 
Esempio:
 
$ ./pippo.sh 654641849
20
 
 
Con 654641849 secondi, mi ritorna 20 anni.
 
Conto a spanne:
 
$ echo "654641849/(3600*24*365)"|bc
20
 
Direi che ci siamo...
 
Vediamo pippo.sh, molto simile al tuo:
--------------------------------------
$ cat pippo.sh
#!/bin/bash
 
t_UTC=$1
ANNI=$(date -u --date=@${t_UTC} +%Y-1970 |bc)
echo $ANNI
----------
 
Troppe virgolette non servono.
 
ANNI è un numero intero, non contiene spazi, virgolette non e servono.
t_UTC è un numero intero, vedi sopra
 
Ma soprattutto bc interpreta in input via pipe l'output del comando
"date", e non ha problemi con gli spazi.
 
In più l'echo che inserivi tu non serve. Già il comando date produce
l'output corretto.
 
Invece servono per formattare correttamente l'argomento del comando
date, se lo vuoi scrivere con gli spazi. Ma non serve neanche quello
se adiamo a vedere. Perché potresti banalmente scrivere:
 
date +%Y-1970
 
come ho messo io sopra. E ti risparmi anche quelle virgolette lì.

 l'output corretto.
 
Si', certo.. solo che prima il "- 1970" era fuori comando data, ho
riportato senza controllare - ariscusate:-(  e ariciao
 
-- 
Yoda
 

 Ecco, la questione-domanda e' questa ciao e grazie eh
 
Intanto come già detto sopra, le virgolette esterne le
puoi togliere, non sono necessarie.
Poi evidentemente l'evidenziazione sintattica dell'editor
o va in panne oppure è proprio fatta così.
Volendo puoi anche toglierla:
F9 opzioni evidenziazione sintassi
la imposti ad unknown e via.
 
Altrimenti prova altri editor.
Io uso vim per lo più.
Anche lì comunque in certi casi, la sintassi evidenziata
non è sempre perfetta. Vado a memoria, ma in rare occasioni
mi sembra di ricordare qualche svarione...
 
Se vuoi restare su mcedit, devi cercare bene in rete su come
impostarlo correttamente per avere una schermata comoda e
cercare bene situazioni che riportano il problema rilevato,
sicuramente no sei il primo ad accorgerti di questo comportamento,
e sicuramente qualcuno lo avrà fatto presente e gli avranno anche
proposto delle soluzioni.
Se non trovi in italiano cerca in inglese. Trovi molta più roba,
manco a dirlo...

 ANNI="$(echo "$(date -u '+%Y - 1970' --date=@${t_UTC})" | bc -l)"
       ^       ^-chiuse
        \-aperte
 
Fai sempre lo stesso *errore*!
 
Non e` la sintassi corretta per quello
che vuoi fare tu.
 
Usa due variabili.
 
bye,
 
-- 
 
piergiorgio

 manco a dirlo...
 
Ok ancora grazie.. aggiungo, a quanto sopra, che mi e' oramai
evidente che mcedit pensa che la /prima/ chiusa-parentesi che
incontra dopo $( sia di chiusura della sostituzione di comando:
$(echo "-($1)
 
equivale a:
$(pippo)
 
per cui le successive virgolette:
" | bc)
 
valgono come apertura d'un commento ariciao
 
-- 
Yoda
 

 dunque e' obbligatorio passarlo a bc con virgolette:
 
No, non e` obbligatorio.
Inoltre, funziona anche *senza* echo...
 
Questo:
 
date -u '+%Y - 1970' --date=2021-01-08T15:15:42 | bc -l
 
Senza "echo" e senza virgolette funziona.
 
Al massimo, servono le virgolette intorno
alla variabile "t_UTC", se vi sono spazi,
cosa che non credo sia il caso...
 
bye,
 
-- 
 
piergiorgio