我正在使用RANDOM变量生成一个由8个字符组成的字符串,但我不完全理解它是如何工作的.命令的结构是${char:offset:length}:
char="1234abcdABCD"
echo -n ${char:RANDOM%${#char}:8}
Run Code Online (Sandbox Code Playgroud)
有人能解释它是如何工作的吗?特别是RANDOM%${#char}?在这种情况下做什么%和#意味着什么?
一步一步地走过去:
$ echo ${#char}
12
Run Code Online (Sandbox Code Playgroud)
这返回了char字符串的长度.它bash在"参数扩展"部分的联机帮助页中进行了说明.
$ echo $(( RANDOM % 12 ))
11
$ echo $(( RANDOM % 12 ))
7
$ echo $(( RANDOM % 12 ))
3
Run Code Online (Sandbox Code Playgroud)
这将执行模数(%)操作RANDOM.RANDOM是一个bash特殊变量,每次读取时都会提供一个新的随机值. RANDOM记录在"Shell变量"部分中; "算术评估"部分中的模数.
$ echo ${char:0:8}
1234abcd
$ echo ${char:4:8}
abcdABCD
$ echo ${char:8:8}
ABCD
Run Code Online (Sandbox Code Playgroud)
这执行子串提取.它在"参数扩展"部分中有记录.
把它们放在一起:
$ echo -n ${char:RANDOM%${#char}:8}
Run Code Online (Sandbox Code Playgroud)
这char将从字符串中的随机位置开始提取最多8个字符串的字符串.