Linux 在bash中,这个基于随机的命令意味着什么?

Linux 在bash中,这个基于随机的命令意味着什么?,linux,bash,random,Linux,Bash,Random,我使用随机变量生成一个由8个字符组成的字符串,但我不完全理解它是如何工作的。命令的结构是${char:offset:length}: char="1234abcdABCD" echo -n ${char:RANDOM%${#char}:8} 有人能解释一下它是怎么工作的吗?尤其是RANDOM%${#char}? 在这种情况下,%和#是什么意思 一步一步地浏览: $ echo ${#char} 12 这返回了char字符串的长度。它记录在“参数扩展”部分的bash手册页中 这将对随机执行模数(

我使用随机变量生成一个由8个字符组成的字符串,但我不完全理解它是如何工作的。命令的结构是
${char:offset:length}

char="1234abcdABCD"
echo -n ${char:RANDOM%${#char}:8}
有人能解释一下它是怎么工作的吗?尤其是
RANDOM%${#char}

在这种情况下,
%
#
是什么意思

一步一步地浏览:

$ echo ${#char}
12
这返回了
char
字符串的长度。它记录在“参数扩展”部分的
bash
手册页中

这将对
随机
执行模数(
%
)操作
RANDOM
是一个
bash
特殊变量,它在每次读取时提供一个新的随机值<代码>随机记录在“外壳变量”部分;“算术评估”部分中的模数

这将执行子字符串提取。它记录在“参数扩展”部分

总而言之:

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

这将从字符串中的随机位置提取最多8个字符。

尝试查找
手册页
以获取随机信息,这相当简单且非常详细。通过搜索,我发现使用了模,因此命令无法给出比长度更大的信息。但不是sure@Kiloreux:随机(3)手册页不是特别相关。这段代码使用了bash的一个特性
$RANDOM
shell变量。我在@KeithThompson中使用了
:1
,它是一个模(特别是一个余数,正如bash手册页所指)。我同意它的位置wrt RANDOM使它看起来很像一个参数修剪,但是它在子字符串提取中的这个位置语法是算术计算的。
$ echo ${char:0:8}
1234abcd
$ echo ${char:4:8}
abcdABCD
$ echo ${char:8:8}
ABCD
$ echo -n ${char:RANDOM%${#char}:8}