2010-04-16 99 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