在范围内创建随机数并访问数组索引图

时间:2014-09-05 02:01:59

标签: arrays linux bash random terminal

我正在尝试在存储有字符的数组中打印出随机字符。我是bash的新手,一直在寻找一些指南,但遇到了一些问题。

我创建一个数组来测试哪些存储字符。然后我有一个名为Range的变量,它是21(这是数组的长度)。

 #create an characters to test with
 letters=(a,b,e,g,i,j,k,l,m,n,p,q,r,s,t,u,v,y,x,w,z)

 RANGE=21

然后我尝试从0获得一个随机数 - >范围,因此它将与数组索引相对应。然后我需要访问随机数的数组索引并将其存储在名为arraychar的变量中。我这样做了:

number=$RANDOM%$RANGE #gets int of a random number between 0 and range (size of array)
arraychar=${letters[$number]} #chooses a random char from array and stores in arraychar

然后我想将这封信作为参数传递给我的可执行文件,如下:

for i in `seq 1 3`;do
   echo $i " "
   ./sample-tree -$arraychar
done

它一直挂在这里,我不太确定它在做什么,以及它为什么不起作用。

任何帮助都会受到赞赏,因为我是新手!

感谢。

1 个答案:

答案 0 :(得分:2)

您帖子中的代码段有很多问题。

letters=(a,b,e,g,i,j,k,l,m,n,p,q,r,s,t,u,v,y,x,w,z)是一个元素的数组。查看declare -p letters吐出来确认的内容。 sh数组是以空格分隔的列表。

shell中数组的长度可通过${#letters[@]}获得。

number=$RANDOM%$RANGE没有按照您的预期行事。再次看看declare -p number说变量的值是什么(echo "$number"也可以。)

您需要arithmetic expansion来评估模数运算(即number=$((RANDOM % RANGE)))。

其他几个"风格"要点:

  • 您在数组索引上下文中不需要$(例如${letters[$number]}可以写为${letters[number]})。
  • 在bash(以及许多其他shell)中,您可以使用{1..3}获取该数字列表,而无需子shell和seq。
  • echo $i " "中的尾随空格对您没什么用处,因为echo也会输出换行符(除非您使用-n但在这种情况下您可能只是最好用printf)。