days=('Sunday''Monday')
days=('Tuesday''Wednesday')
days=('Thursday''Friday')
days=('Saturday')
for numbers in "S@";
do
if [ $numbers -ge 0 ];
then
result=$(($numbers % 7))
echo ${days[$result]}
fi
shift
done
这就是我到目前为止所得到的。
答案1
您在声明数组时遇到问题:
days=('Sunday''Monday') # this means days[0]="SundayMonday"
days=('Tuesday''Wednesday') # this means days[0]="TuesdayWednesday"
days=('Thursday''Friday') # this means days[0]="ThursdayFriday"
days=('Saturday') # this means days[0]="Saturday"
你要这个:
days=(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
如果需要,您可以引用日期名称,shell 并不关心,因为它们不会发生 shell 扩展。
下一个
for numbers in "S@";
这是一个大写字母,S而不是所需的美元符号$。因此第一次也是唯一一次通过循环时, 的值$numbers
将是 2 个字符的字符串S@
除此之外,看起来还不错。
挑剔的小事:
- 你不需要以分号结束行
- “numbers”是一个糟糕的变量名,只能保存一个数字
bash 在算术表达式中扩展变量时不带印记:
result=$((numbers % 7)) echo "${days[result]}"
如果您要迭代位置参数,则无需引用它们:
for number do echo "${days[number % 7]}"; done
我会把它写成一个 shell 函数:
day_of_week() {
local dow=$1
if [[ $dow -lt 0 ]]; then
echo "error: pass a positive number"
return 1
fi
local days=(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
echo "${days[dow]}"
}