#!/bin/bash
year="${1:0:4}";month="${1:4:2}";day="${1:6:2}"
element=('Wood' 'Fire' 'Earth' 'Metal' 'Water')
rat=(05021924 23021925 24011936 10021937 10021948 28011949 28011960 14021961 15021972 02021973 02021984 19021985 19021996 06021997 07022008 25012009 25012020 11022021 11022032 30012033)
pig=(04021935 23011936 22011947 09021948 08021959 27011960 27011971 14021972 13021983 01021984 31011995 18021996 18022007 06022008 05022019 24012020 23012031 10022032 10022043 29012044)
Scounter=0
Ecounter=1
for (( i=0; i<10; i++ )) #10 is the number of date RANGES
do
echo $i
#done
#echo "start of year"
#Make sure that the base value for Month and Day is base 10 and not base 8. Base 8 is a number starting with 0.
sDay=${rat[$Scounter]:0:2};sMonth=${rat[$Scounter]:2:2};sYear=${rat[$Scounter]:4:4}
#echo "end of year"
eDay=${rat[$Ecounter]:0:2};eMonth=${rat[$Ecounter]:2:2};eYear=${rat[$Ecounter]:4:4}
#10base conversion
#month=$((10#$month))
#day=$((10#$day))
#sMonth=$((10#$sMonth))
#sDay=$((10#$sDay))
#eMonth=$((10#$eMonth))
#eDay=$((10#$eDay))
if [[ $year -eq $sYear && $month -ge $sMonth && $day -ge $sDay || $year -eq $eYear && $month -le $eMonth && $day -le $eDay ]]
then
if [[ $i -gt 4 ]]
then
echo "${element[$((i-5))]} rat"
else
echo "${element[$i]} rat"
fi
fi
Scounter=$((Scounter+2))
Ecounter=$((Ecounter+2))
done
我正在尝试更换&#34;老鼠&#34;在sDay,sMonth,sYear等。用一个指向数组大鼠或猪的变量。我尝试过使用替换
sDay=${$rat[$Scounter]:0:2};
但是我得到了替换错误
顺便说一下,我正在制作一个中国十二生肖剧本。
答案 0 :(得分:4)
我相信你正在寻找间接:
$ rat=(05021924 23021925 24011936 10021937 10021948 28011949 28011960 14021961 15021972 02021973 02021984 19021985 19021996 06021997 07022008 25012009 25012020 11022021 11022032 30012033)
$ y="rat[1]"; echo "${!y}"
23021925
$ y="rat[1]"; echo "${!y:0:2}"
23
将上述内容用作循环的一部分:
for x in rat pig
do
for i in 0 1
do
y="$x[$i]"
echo "$x $i ${!y}"
done
done
产生输出:
rat 0 05021924
rat 1 23021925
pig 0 04021935
pig 1 23011936
来自man bash
:
$ {参数} 的
参数的值被替换。当参数是具有多个数字的位置参数或参数时,需要括号 后跟一个不能被解释为其名称一部分的字符。该参数是如上所述的shell参数PARAMETERS)或 数组引用(数组)。如果参数的第一个字符是感叹号(!),则为 引入了一个变量间接的级别。 Bash使用的值 由参数的其余部分形成的变量作为名称 变量;然后展开此变量,并在该变量中使用该值 其余的替换,而不是参数的值 本身。这被称为间接扩张。例外情况 是下面描述的$ {!prefix *}和$ {!name [@]}的扩展。 感叹号必须紧跟左支撑 介绍间接。 [重点补充。]