GNU/Linux >> Linux Esercitazione >  >> Linux

Bash - Comando data e spazio

L'approccio corretto è definire la tua funzione all'interno del tuo script Bash.

function my_date {
  date "+%y-%m-%d %H:%M:%S"
}

Ora puoi usare my_date come se fosse un programma esterno.

Ad esempio:

echo "It is now $(my_date)."

O semplicemente:

my_date

Perché il tuo approccio non funziona?

Il primo problema è che il tuo compito è rotto.

DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""

Questo viene analizzato come un'assegnazione della stringa date +%y-%m-%d alla variabile DATE_COMMAND . Dopo lo spazio vuoto, la shell inizia a interpretare i simboli rimanenti in modi che non avevi previsto.

Questo potrebbe essere parzialmente risolto modificando la quotazione.

DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"

Tuttavia, questo non risolve davvero il problema perché se ora usiamo

echo $($DATE_COMMAND)

Non espanderà correttamente l'argomento. Il date il programma vedrà gli argomenti '+%y-%m-%d e %H:%M:%S' (con virgolette) invece di una singola stringa. Questo potrebbe essere risolto usando eval come in

DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)

dove la variabile DATE_COMMAND viene prima espanso alla stringa date '+%y-%m-%d %H:%M:%S' cioè eval uated come se fosse scritto così invocando così date correttamente.

Tieni presente che lo sto mostrando solo per spiegare il problema. eval non è una buona soluzione qui. Usa invece una funzione.

PS È meglio evitare stringhe identificative tutte maiuscole poiché spesso sono in conflitto con le variabili d'ambiente o addirittura hanno un significato magico per la shell.


Fuggire dallo spazio funziona per me.

echo `date +%d.%m.%Y\ %R.%S.%3N` 

Linux
  1. Imposta data e ora per ogni comando che esegui nella cronologia di Bash

  2. Differenza tra "e" sulla riga di comando (bash)??

  3. È consentito lo spazio tra #! E /bin/bash a Shebang?

  4. comando eval in Bash e i suoi usi tipici

  5. Qual è la differenza tra &> e >&in bash?

Comando sorgente Bash

Comando della cronologia in Linux (Cronologia di Bash)

Comando di uscita Bash e codici di uscita

Comando Bash printf

Come utilizzare il comando Date negli script Bash in Linux

Script Bash(II)