2015-09-14 38 views
2

我使用RANDOM變量來生成一個由8個字符組成的字符串,但我不完全理解它是如何工作的。該命令的結構是${char:offset:length}這個基於RANDOM的命令在bash中意味着什麼?

char="1234abcdABCD" 
echo -n ${char:RANDOM%${#char}:8} 

有人能解釋它是如何工作的?特別是RANDOM%${#char}? 在這種情況下%#是什麼意思?

+0

已經嘗試尋找RANDOM的'man page',它相當簡單且非常詳細。 – Kiloreux

+0

通過搜索,我發現使用了模數,所以命令不能提供比長度大的東西。但不確定 – Dimareal

+3

@Kiloreux:'random(3)'手冊頁並不特別相關。這段代碼使用'$ RANDOM' shell變量,這是bash的一個特性。 –

回答

6

走過它一步一步:

$ echo ${#char} 
12 

此返回的char字符串的長度。它在「參數擴展」部分的bash聯機幫助頁中有記錄。

$ echo $((RANDOM % 12)) 
11 
$ echo $((RANDOM % 12)) 
7 
$ echo $((RANDOM % 12)) 
3 

這執行了模量(%)上RANDOM操作。 RANDOM是一個bash特殊變量,每次讀取時都會提供一個新的隨機值。在「Shell變量」部分中記錄了RANDOM;在「算術評估」部分中的模數。

$ echo ${char:0:8} 
1234abcd 
$ echo ${char:4:8} 
abcdABCD 
$ echo ${char:8:8} 
ABCD 

這執行子串提取。它在「參數擴展」部分有記錄。

全部放在一起:

$ echo -n ${char:RANDOM%${#char}:8} 

這提取到char串的8個字符,起始於字符串中的隨機位置。

+0

完美的,謝謝 – Dimareal