FRAPPER:Comment « diviser » la commande de date ?
-
21-09-2019 - |
Question
Utilisateur Cygwin ici (mais s'il existe une solution appropriée, je la transférerai sur K/Ubuntu, que j'utilise également).
J'ai un message de bienvenue dans mon .bashrc qui ressemble à ce qui suit :
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"
Après de nombreuses tentatives pour utiliser des espaces dans la variable SAD ci-dessus, j'ai cédé et utilisé des traits d'union.Mais je ne suis évidemment pas satisfait de cette solution de fortune.Le problème, si je me souviens bien, était que chaque fois que j'essayais d'utiliser un espace entre guillemets, \s ou une balise d'échappement similaire, ainsi que les variables répertoriées dans la section appropriée de la page de manuel GNU pour date, la variable Année a été ignorée ou a renvoyé une erreur.Ce que je ne veux pas avoir à faire, c'est recourir à la chaîne complète renvoyée par date, mais plutôt pour garder l'ordre dans lequel j'ai les choses dans le code ci-dessus.
Au moment où j'écris ceci, il me vient à l'esprit que définir l'IFS autour de ce code pour le message de bienvenue peut fonctionner, à condition que je le rétablisse ensuite aux valeurs par défaut (ce qui précède apparaît aux lignes 13 à 17 d'un .bashrc de 68 lignes).Cependant, je ne me souviens pas comment procéder et je ne suis pas sûr que cela fonctionnerait.
D'une manière générale, les fichiers .bashrc sont dans une syntaxe BASH valide, n'est-ce pas ?Les miens ressemblent certainement aux scripts que j’ai écrits moi-même ou testés à partir d’autres sources.Tout ce qui me manque, je suppose, c'est le code permettant de définir et de désactiver les séparateurs de champs autour de ce bloc de message.
Il ne fait aucun doute que quiconque trouvera une solution me rendra service, non seulement à moi, mais aussi à tous les autres nouveaux venus sur le Net qui font leurs premiers (ou du treizième au dix-septième) pas dans le monde des scripts shell.
BZT
La solution
Mettre
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)"
dans mes impressions .bash_profile
Today's Date is: Thursday February 18 2010.
Dublin time is now 12:55. (24-Hour Clock)
Je pense que ce que vous voulez.
Autres conseils
le problème est votre déclaration de tableau.
SAD=(date +%A-%B-%d-%Y)
signifie simplement que vous mettez la chaîne "date" comme élément 0, et "+% A% B% d-% Y" comme élément 1. voir par vous-même
$ SAD=(date +%A-%B-%d-%Y) #<-- this is an array declaration
$ echo ${SAD[0]}
date
$ echo ${SAD[1]}
+%A-%B-%d-%Y
si vous voulez la valeur de commande « date » d'être dans une variable, utilisez $(..)
, par exemple
$ SAD=$(date +%A-%B-%d-%Y)
$ echo ${SAD}
Thursday-February-18-2010
Pour obtenir des espaces, vous devez citer l'argument date
pour que ce soit une seule chaîne. Vous êtes également déclarer à tort SAD
et DUB
sous forme de tableaux, quand ce que vous avez vraiment l'intention de faire était de les évaluer. Essayez ceci:
[/tmp]> $(date "+%A %B %d, %Y")
Thursday February 18, 2010
date +%A\ %B\ %d\ %Y
J'ai trouvé la combinaison qui fonctionne :
SAD=$(date "+%A %B %d %Y")
echo $SAD
jeudi 18 février 2010
Encore un autre cas où :
- C'est payant de poser une question
- Il est utile de savoir où placer vos guillemets doubles.
date ne le sait évidemment pas d'après l'espace cité, mais Bash le sait, donc
il s'agit de « chuchoter à l'oreille droite ».
Merci ghostdog74.
BZT