定义包含以下内容的字符列表的最佳方法是什么:a-z
,A-Z
和0-9
?我真的想避免输入一个巨大的数组来保存这些数据,我怎样才能在Bash中完成这个?在Python中,这个数据列表可以这样连接:
for i in xrange(length):
password += random.choice(string.ascii_letters + string.digits)
print password
答案 0 :(得分:5)
我认为你真的不需要一个数组,只是一个字符串(因为它很容易从字符串中选出第n个字符):
printf -v chars "%s" {a..z} {A..Z} {0..9}
nchars=${#chars}
for ((i=1; i<=length; i++)); do
password+="${chars:RANDOM%nchars:1}"
done
答案 1 :(得分:4)
如果你的list
是一个字符串,你可以:
<强>击强>
kent$ echo {a..z} {A..Z} {0..9}
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9
<强>的zsh 强>
kent$ echo {a-z} {A-Z} {0-9}
我希望这就是你要找的东西。
修改强>
OP想要一个数组:
kent$ arr=( {a..z} {A..Z} {0..9} )
kent$ echo ${arr[@]}
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9
kent$ echo ${arr[3]}
d
答案 2 :(得分:1)
以这种方式生成数组:
array=( );
i=0;
for c in {a..z} {A..Z} {0..9}; do
array+=("$c");
let i++;
done