如何“爆炸”随机字符串? 我所追求的是; 取n长度的随机字符串
<html>
<head>
</head>
<body>
...........
<script></script>
</body>
</html>
爆炸角色,使它们适合k空间
characters=$(</dev/urandom tr -dc '1234567890{}[]`~\/><!@#$%^&*()_+=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | head -c${n})
其中k是“爆炸”的legnth。
最终我想在每个角色下面设置一个胡萝卜“^”,然后按照键入的内容进行操作。
请参阅我的其他帖子here
答案 0 :(得分:1)
您可以使用bash提供的整数数学功能来计算每个字符之间适合的空格数,以将字符串扩展为最大请求大小k
(每个字符之间只有相等的空格数并注意n-1
个字符之间有n
个广告位以展开)
您只需计算字符串的长度,您有要扩展到的请求大小,使用整数除法(有意截断)您可以计算每个字符之间可以放置的空间数,同时保持在请求的大小范围内。您可以使用以下内容执行此操作:
#!/bin/bash
str="string to explode" ## string
len=${#str} ## string length
k=$((${1:-70})) ## exploded size requested
((k < len)) && { ## validate requested size > length
printf "error: width 'k' less than length '%d'\n" "$len"
exit 1
}
sep=$((k/len)) ## max separation between chars (integer division)
((sep < 2)) && { ## if 1, cannot explode
printf "%s (no expansion)\n" "$str"
exit 0
}
sepst="" ## set separator string
printf -v sepst "%*s" $((sep - 1)) " "
## insert sepst betwen each char
for ((i = 0; i < $((len - 1)); i++)); do
printf "%s%s" ${str:$((i)):1} "$sepst" ## str intentionally unquoted
done ## (quote for preserve space)
## print final char
printf "%s\n" "${str: -1}"
这需要"string to explode"
并扩展到请求的70
大小(计算每个字符之间的偶数最大间隔3-spaces
总计(17 + 48 = 65 chars
)
使用示例
$ explodestr.sh
s t r i n g t o e x p l o d e
要打印每个space
的分隔符,请引用"${str:$((i)):1}"
,这将保留(而不是省略)每个space
。 (接受你的选择 - 只是让空间更加明显)
$ explodestr.sh
s t r i n g t o e x p l o d e