我的目标是在bash中添加以下内容:

str=random_string(n scharacters)

我设法做到了以下几点:

chars=abcdefghijklmnopqrstuvwxyz
for (( i=1; i<=n; i++ ))
do
   str="${chars:RANDOM%${#chars}:1}"
done

问题在于str还包含新行。

你有什么想法?

分析解答

这可能是您要寻找的:

#!/bin/bash

chars='abcdefghijklmnopqrstuvwxyz'
n=10

str=
for ((i = 0; i < n; ++i)); do
    str+=${chars:RANDOM%${#chars}:1}
    # alternatively, str=$str${chars:RANDOM%${#chars}:1} also possible
done

echo "$str"

您的代码几乎是正确的,只是您错过了+=运算符。 +=运算符会附加到变量(此处为str)的先前值。此操作符是在3.1版本的bash中引入的。顺便提一下,它也可以应用于数组变量,以便将新元素附加到数组。还必须注意,在算术上下文中,+=运算符右侧的表达式作为算术表达式求值,并添加到变量的当前值中。