1

定义由以下内容组成的字符列表的最佳方法是什么:a-z、、A-Z0-9?我真的很想避免输入一个巨大的数组来保存这些数据,我怎样才能在 Bash 中完成呢?在 Python 中,这个数据列表可以这样连接:

for i in xrange(length):
    password += random.choice(string.ascii_letters + string.digits)

print password
4

3 回答 3

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
于 2013-05-08T22:45:52.470 回答
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
于 2013-05-08T22:22:33.360 回答
1

以这种方式生成数组:

array=( ); 
i=0; 
for c in {a..z} {A..Z} {0..9}; do 
    array+=("$c"); 
    let i++; 
done
于 2013-05-08T22:30:07.360 回答