我使用RANDOM變量來生成一個由8個字符組成的字符串,但我不完全理解它是如何工作的。該命令的結構是${char:offset:length}
:這個基於RANDOM的命令在bash中意味着什麼?
char="1234abcdABCD"
echo -n ${char:RANDOM%${#char}:8}
有人能解釋它是如何工作的?特別是RANDOM%${#char}
? 在這種情況下%
和#
是什麼意思?
我使用RANDOM變量來生成一個由8個字符組成的字符串,但我不完全理解它是如何工作的。該命令的結構是${char:offset:length}
:這個基於RANDOM的命令在bash中意味着什麼?
char="1234abcdABCD"
echo -n ${char:RANDOM%${#char}:8}
有人能解釋它是如何工作的?特別是RANDOM%${#char}
? 在這種情況下%
和#
是什麼意思?
走過它一步一步:
$ 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個字符,起始於字符串中的隨機位置。
完美的,謝謝 – Dimareal
已經嘗試尋找RANDOM的'man page',它相當簡單且非常詳細。 – Kiloreux
通過搜索,我發現使用了模數,所以命令不能提供比長度大的東西。但不確定 – Dimareal
@Kiloreux:'random(3)'手冊頁並不特別相關。這段代碼使用'$ RANDOM' shell變量,這是bash的一個特性。 –