2010-04-16 70 views
1

使用bash,我有一个我想用来替换int的字符串列表。这里有一个例子:将数字转换为在bash中的字符串枚举

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

如果我有一个int,$ dow来表示星期几,我该如何打印实际的字符串?我试过这个:

echo ${day`echo $dow`}

但是得到“坏代换”的错误。我如何完成这项工作?注意:我可以将$ day变量更改为列表或其他内容。

回答

1

是的,这将是最容易做到这一点作为数组:

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

完美!我不知道[1] = ... [2] = ...这太酷了! – User1 2010-04-16 18:56:17

+0

您可以设置第一个索引,其余的将会按照:'日=([1] =星期一星期二星期三...)' – 2010-04-16 20:43:07

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

我不想得到大声呵斥的不安全使用“EVAL”的:-)

这样做可能有更“现代”的方式。

0

你可以使用可变间接:

day_var=day$dow 
echo ${!day_var} 

但是,你应该考虑使用数组:

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

我喜欢它,但我只能选择一个答案。 – User1 2010-04-16 18:55:39

+0

方括号的使用方式与内置方式不同(在这种情况下不必使用)。当前的用法是'$((...))',但数组下标将为你做数学运算:'$ {days [dow-1]}' – 2010-04-16 20:41:22

0

在1970年6月(?你还记得)本月开始星期一:

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

t = 7; date -d'first sunday +'$ t'day'+%A 也许更容易记住。 – 2010-04-19 03:46:56