Bash 分解随机字符串
如何“爆炸”一个随机字符串? 我追求的是; 取n个长度的随机字符串Bash 分解随机字符串,bash,random,Bash,Random,如何“爆炸”一个随机字符串? 我追求的是; 取n个长度的随机字符串 characters=$(</dev/urandom tr -dc '1234567890{}[]`~\/><!@#$%^&*()_+=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | head -c${n}) 其中k是“爆炸”长度 最后,我想在每个字符下设置一个胡萝卜“^”,并让它跟随键入的内容 请参阅我的另一篇文章您可以使用bash提
characters=$(</dev/urandom tr -dc '1234567890{}[]`~\/><!@#$%^&*()_+=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | head -c${n})
其中k是“爆炸”长度
最后,我想在每个字符下设置一个胡萝卜“^”,并让它跟随键入的内容
请参阅我的另一篇文章您可以使用bash提供的整数数学功能来计算每个字符之间的空格数,以将字符串扩展到所请求的最大大小
k
(每个字符之间的空格数相等,注意n
字符之间有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}"
要打印两侧带有分隔符的每个空格
,请引用“${str:$((i)):1}”
,它将保留(而不是省略)每个空格
。(根据您的选择--它只会使空格更明显)
#!/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}"
$ explodestr.sh
s t r i n g t o e x p l o d e
$ explodestr.sh
s t r i n g t o e x p l o d e