Domanda

Utente Cygwin qui (anche se se c'è una soluzione adatta la trasferirò su K/Ubuntu, che uso anch'io).

Ho un messaggio di benvenuto nel mio .bashrc simile al seguente:

SAD=(`date +%A-%B-%d-%Y`)
DUB=(`date -u +%k:%M`)
printf "Today's Date is: ${SAD}.\n"
printf "Dublin time is now ${DUB}. (24-Hour Clock)\n"

Dopo numerosi tentativi di utilizzare gli spazi bianchi nella variabile SAD sopra, ho ceduto e ho utilizzato i trattini.Ma comprensibilmente non sono soddisfatto di questa soluzione di cerotto.Il problema, se ricordo bene, era che ogni volta che provavo a usare lo spazio tra virgolette, \s o qualche tag di escape simile, insieme alle variabili elencate nella sezione appropriata della manpage GNU per data, la variabile per Anno è stata ignorata o ha restituito un errore.Quello che non voglio fare è ricorrere alla stringa completa restituita da data, ma piuttosto per mantenere l'ordine in cui ho le cose nel codice sopra.

Mentre scrivo questo, mi viene in mente che impostare l'IFS attorno a questo codice per il messaggio di benvenuto potrebbe funzionare, a patto di ripristinarlo successivamente ai valori predefiniti (quello sopra appare alle righe 13-17 di un .bashrc di 68 righe).Tuttavia, non riesco a ricordare come farlo, né sono sicuro che funzionerebbe.

In generale, i file .bashrc hanno una sintassi BASH valida, non è vero?I miei certamente assomigliano agli script che ho scritto io stesso o che ho testato da altre fonti.Tutto quello che mi manca, suppongo, è il codice per impostare e disattivare i separatori di campo attorno a questo blocco di messaggi.

Senza dubbio chiunque trovi una soluzione farà un favore non solo a me, ma a tutti gli altri neofiti della Rete che muovono i primi (o dal tredicesimo al diciassettesimo) passo nel mondo dello scripting di shell.

BZT

È stato utile?

Soluzione

Mettendo

SAD=$(date "+%A %B %d %Y")
DUB=$(date -u +%k:%M)
echo "Today's Date is: ${SAD}."
echo "Dublin time is now ${DUB}. (24-Hour Clock)"

nel mio .bash_profile stampe

Today's Date is: Thursday February 18 2010.
Dublin time is now 12:55. (24-Hour Clock)

Penso che sia quello che vuoi.

Altri suggerimenti

il problema è la dichiarazione dell'array.

SAD=(date +%A-%B-%d-%Y) significa semplicemente che stai inserendo la stringa "data" come elemento 0 e "+%A-%B-%d-%Y" come elemento 1.vedere di persona

$ SAD=(date +%A-%B-%d-%Y)  #<-- this is an array declaration
$ echo ${SAD[0]}
date
$ echo ${SAD[1]}
+%A-%B-%d-%Y

se vuoi che il valore del comando "date" sia in una variabile, usa $(..), per esempio

$ SAD=$(date +%A-%B-%d-%Y)
$ echo ${SAD}
Thursday-February-18-2010

Per ottenere spazi, è necessario citare l'argomento date in modo che sia una singola stringa.Anche tu dichiari erroneamente SAD E DUB come array, quando ciò che intendevi veramente fare era valutarli.Prova questo:

[/tmp]> $(date "+%A %B %d, %Y")
Thursday February 18, 2010

date +%A\ %B\ %d\ %Y

Ho trovato la combinazione che funziona:
SAD=$(date "+%A %B %d %Y")
echo $SAD
Giovedì 18 febbraio 2010

Ancora un altro caso in cui:

  1. Vale la pena fare una domanda
  2. È utile sapere dove inserire le virgolette doppie.
    data ovviamente non lo sa dallo spazio tra virgolette, ma Bash lo sa
    è una questione di "sussurrare all'orecchio destro".

Grazie ghostdog74.

BZT

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top