Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays BASH数组中的单个下标中可能有多个值吗?_Arrays_Bash - Fatal编程技术网

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感谢您的反馈。很高兴知道它有效。你的评论鼓励了我。干杯