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

Était-ce utile?

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ù :

  1. C'est payant de poser une question
  2. 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top