Esp*_*sen 19 shell-script random variable
是否有可能从三个预先确定的数字中选择一个随机数的变量?
样本:
var= 10 or 100 or 1000
Run Code Online (Sandbox Code Playgroud)
Ale*_*exP 31
使用数组保存值并使用内置变量在其中进行选择$RANDOM。例如,
x[0]=10 # One decade
x[1]=100 # One century
x[2]=1000 # One millennium
for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10
Run Code Online (Sandbox Code Playgroud)
随机性的质量不会是最好的(/dev/urandom为此读取字节),但它对于脚本来说应该足够好了。
注 1:正如人们在评论中所观察到的那样,当然可以使用数组 literal: 代替单独初始化数组元素x=(10 100 1000)。
注 2:不是对数组中的元素数量进行硬编码,而是可以通过 提取随机元素${x[$RANDOM%${#x[@]}]}。
zep*_*lin 29
如果您使用bash(或zsh或ksh93),您可以这样做:
echo "$((10**($RANDOM%3+1)))"
Run Code Online (Sandbox Code Playgroud)
或者
var=$((10**($RANDOM%3+1)))
Run Code Online (Sandbox Code Playgroud)
将其分配给var
Dig*_*uma 20
您还可以使用 GNU coreutilsshuf实用程序:
a=$(shuf -n1 -e 10 100 1000)
Run Code Online (Sandbox Code Playgroud)
不过RANDOM,按照其他答案使用几乎肯定会更快。
case $(( RANDOM % 3 )) in
0)
var=10
;;
1)
var=100
;;
2)
var=1000
;;
esac
Run Code Online (Sandbox Code Playgroud)
这是一个有点神秘的方式:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Run Code Online (Sandbox Code Playgroud)
这将$var根据需要分配随机值。该printf格式串是1%0Nd-这将导致0要被打印与N前导零,其中,N将在间隔的随机整数[1,3]。