名單

2013-05-08 44 views
1

什麼是界定包括以下的字符列表的最佳方式:a-zA-Z,並0-9?我真的很想避免輸入一個巨大的數組來保存這些數據,我該如何在Bash中完成這項工作?在Python中,數據的這個名單可以加入這樣:名單

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

print password 
+0

你的意思是一個表,一個字符串? 'a b c d ...'? – Kent 2013-05-08 22:19:43

+0

我想定義從a-z到數字0-9的所有小寫字母和大寫字母的列表。 @Kent – theGrayFox 2013-05-08 22:22:09

+0

在bash中沒有'list'數據結構。無論如何,我發佈了一個答案。希望能幫助到你。 – Kent 2013-05-08 22:25:54

回答

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 
+0

你肯定給了我更多的想法和更清晰的想法,以便我接下來要做什麼,我非常感謝。 – theGrayFox 2013-05-08 22:59:01

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 
+0

不完全,我試圖生成一個隨機密碼,但在做這個之前,我需要一個所有這些字符的操作數組。我希望我可以避免輸入這個龐大的數組。 – theGrayFox 2013-05-08 22:25:07

+0

所以你需要一個'bash數組'? – Kent 2013-05-08 22:27:20

+0

@ Dford.py查看我編輯的數組 – Kent 2013-05-08 22:30:59

1

生成一個數組是這樣的:

array=(); 
i=0; 
for c in {a..z} {A..Z} {0..9}; do 
    array+=("$c"); 
    let i++; 
done 
+0

我認爲這指出它,我甚至可以委託{a..z} {A..Z} {0..9}在一個變量中。 – theGrayFox 2013-05-08 22:37:34

+1

循環是不必要的;只需將大括號表達式直接放在括號中,然後將其分配給'array'。 – chepner 2013-05-08 23:05:16