2010-04-16 3 views
1

En utilisant bash, j'ai une liste de chaînes que je veux utiliser pour remplacer un int. Voici un exemple:Convertir les nombres en énumération de chaînes dans bash

 
day1=Monday 
day2=Tuesday 
day3=Wednesday 
day4=Thursday 
day5=Friday 
day6=Saturday 
day7=Sunday 

Si j'ai un int, dow $, pour représenter le jour de la semaine, comment puis-je imprimer la chaîne réelle? J'ai essayé ceci:

echo ${day`echo $dow`}

mais obtenir l'erreur de "mauvaise substitution". Comment puis-je faire ce travail? Note: Je peux changer les variables $ day en une liste ou quelque chose.

Répondre

1

Oui, il serait plus facile de le faire comme un tableau:

day=([1]=Monday [2]=Tuesday ...) 
echo "${day[dow]}" 
+0

parfait! Je ne savais pas sur le [1] = ... [2] = ... C'est très cool! – User1

+0

Vous pouvez définir le premier index et le reste suivra: 'day = ([1] = lundi mardi mercredi ...)' –

1
case $dow in 
    [1234567]) eval echo '$day'$dow ;; 
esac 

Je ne voulais pas me crier dessus pour une utilisation dangereuse de « eval » :-)

Il y a probablement une façon plus "moderne" de faire cela.

0

Vous pouvez utiliser indirection variable:

day_var=day$dow 
echo ${!day_var} 

Mais vous devriez envisager l'utilisation de tableaux:

days=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday") 
echo ${days[$[$dow-1]]} 
+0

J'aime bien, mais je ne peux sélectionner qu'une seule réponse. – User1

+0

L'utilisation des crochets comme vous les avez pour l'ensemble interne est déconseillée (et inutile dans ce cas). L'utilisation courante est '$ ((...))' mais l'indice du tableau fera le calcul pour vous: '$ {days [dow-1]}' –

0

En Juin 1970 (? Vous souvenez-vous) le mois a commencé avec lundi:

for d in {1..7} 
do 
    date -d 1970-06-0$d +%A 
done 
+0

t = 7; date -d 'premier dimanche +' $ t'day '+% A peut-être plus facile à retenir. –

Questions connexes