我正在尝试在存储有字符的数组中打印出随机字符。我是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
它一直挂在这里,我不太确定它在做什么,以及它为什么不起作用。
任何帮助都会受到赞赏,因为我是新手!
感谢。
答案 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]}
)。{1..3}
获取该数字列表,而无需子shell和seq。echo $i " "
中的尾随空格对您没什么用处,因为echo
也会输出换行符(除非您使用-n
但在这种情况下您可能只是最好用printf
)。