爆炸随机字符串

时间:2016-09-04 04:31:32

标签: bash random

如何“爆炸”随机字符串? 我所追求的是; 取n长度的随机字符串

<html>
   <head>
   </head>
   <body>
       ...........
   <script></script>
   </body>
</html>

爆炸角色,使它们适合k空间

characters=$(</dev/urandom tr -dc '1234567890{}[]`~\/><!@#$%^&*()_+=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | head -c${n})

其中k是“爆炸”的legnth。

最终我想在每个角色下面设置一个胡萝卜“^”,然后按照键入的内容进行操作。

请参阅我的其他帖子here

1 个答案:

答案 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