Arrays BASH数组中的单个下标中可能有多个值吗?
我正在创建一个脚本,将处理思科序列号和生产日期 我使用下面的数组来处理月份部分,它可以正常工作。该阵列的设置如下所示:Arrays BASH数组中的单个下标中可能有多个值吗?,arrays,bash,Arrays,Bash,我正在创建一个脚本,将处理思科序列号和生产日期 我使用下面的数组来处理月份部分,它可以正常工作。该阵列的设置如下所示: declare -A d_year d_year[10]="2006" d_year[11]="2007" d_year[12]="2008" d_year[13]="2009" d_year[14]="2010" d_year[15]="2011" 问题来自月份部分,因为数字1~5=1月,6~9=2月。我尝试了以下方法,但没有效果: declare -A d_month
declare -A d_year
d_year[10]="2006"
d_year[11]="2007"
d_year[12]="2008"
d_year[13]="2009"
d_year[14]="2010"
d_year[15]="2011"
问题来自月份部分,因为数字1~5=1月,6~9=2月。我尝试了以下方法,但没有效果:
declare -A d_month
d_month[{1:5}]="January"
d_month[{6..9}]="February"
d_month[{10..14}]="March"
当它试图处理序列号时,年份部分不会出现问题,但月份会产生以下错误(它会对数组中其他格式错误的部分产生错误):
我可以一行一行地做,但我觉得有一种更简单的方法,我可能会错过?所以我的问题是,有没有可能用这种方法创建一个数组来处理一系列的数字呢?IMHO
case
是正确的选择,你能试试这个吗
#!/bin/bash
d_year=$1
d_month=$2
case $d_year in
10) year="2006";;
11) year="2007";;
12) year="2008";;
13) year="2009";;
14) year="2010";;
15) year="2011";;
esac
case $d_month in
[1-5]) month="January" ;;
[6-9]) month="February";;
1[0-4]) month="March" ;;
esac
echo $month $year
用法
IMHO
case
是正确的选择,你能试试这个吗
#!/bin/bash
d_year=$1
d_month=$2
case $d_year in
10) year="2006";;
11) year="2007";;
12) year="2008";;
13) year="2009";;
14) year="2010";;
15) year="2011";;
esac
case $d_month in
[1-5]) month="January" ;;
[6-9]) month="February";;
1[0-4]) month="March" ;;
esac
echo $month $year
用法
我创建了一个小脚本,向您展示了如何使用自定义函数实现这一点:
#/bin/bash
申报-一个月;
函数put(){
对于以美元表示的i(seq$1$2);执行
d_月[$i]=“$3”;
完成;
}
把15个“一月”;
把6.9“二月”;
“3月14日”;
对于“${!d_月[@]}”中的i;做
echo“$i=>${d_月[$i]}”;
完成;
底部的
for
循环只是显示数组的内容,而不是函数功能的一部分。我创建了一个小脚本,向您展示如何使用自定义函数实现此功能:
#/bin/bash
申报-一个月;
函数put(){
对于以美元表示的i(seq$1$2);执行
d_月[$i]=“$3”;
完成;
}
把15个“一月”;
把6.9“二月”;
“3月14日”;
对于“${!d_月[@]}”中的i;做
echo“$i=>${d_月[$i]}”;
完成;
底部的for
循环只是显示数组的内容,而不是函数功能的一部分。请尝试:
for m in {1..5}; do d_month[$m]="January"; done
for m in {6..10}; do d_month[$m]="February"; done
for m in {11..15}; do d_month[$m]="March"; done
请你试试:
for m in {1..5}; do d_month[$m]="January"; done
for m in {6..10}; do d_month[$m]="February"; done
for m in {11..15}; do d_month[$m]="March"; done
基于整数的数组可以用几种方式定义。一种不太常见的方法是使用
a=( [20]="value" [30]="value" )
这将创建一个基于整数的数组,其中包含索引为20和30的2个元素
现在可以使用printf
和eval
利用这一点:
d_year=( [10]=2006 [11]=2007 [12]=2008 [13]=2009 [14]=2010 [15]=2011 )
d_month=()
eval d_month+=( $(printf '[%d]="January" ' {1..5} ) )
eval d_month+=( $(printf '[%d]="February" ' {6..9} ) )
eval d_month+=( $(printf '[%d]="March" ' {10..14}) )
基于整数的数组可以用几种方式定义。一种不太常见的方法是使用
a=( [20]="value" [30]="value" )
这将创建一个基于整数的数组,其中包含索引为20和30的2个元素
现在可以使用printf
和eval
利用这一点:
d_year=( [10]=2006 [11]=2007 [12]=2008 [13]=2009 [14]=2010 [15]=2011 )
d_month=()
eval d_month+=( $(printf '[%d]="January" ' {1..5} ) )
eval d_month+=( $(printf '[%d]="February" ' {6..9} ) )
eval d_month+=( $(printf '[%d]="March" ' {10..14}) )
你想一次给多个数组索引赋值吗?我想是的,就像我的月数组是这样的,如果我能把1~5放到一个值中,它会产生一月,这就是我想得出的结论。那么你想一次给多个数组索引赋值吗?我想是的,就像我的月数组一样,如果我能把1~5放在一个值中,这样就产生了1月份,这就是我想要得到的结论。工作得很有魅力!非常感谢你!我从来没有想过要将“FOR”操作与数组结合起来@kuroikenshi感谢您的反馈。很高兴知道它有效。你的评论鼓励了我。干杯工作得很有魅力!非常感谢你!我从来没有想过要将“FOR”操作与数组结合起来@kuroikenshi感谢您的反馈。很高兴知道它有效。你的评论鼓励了我。干杯