![如何安全地随机化字符串中字符的顺序?](https://linux22.com/image/101361/%E5%A6%82%E4%BD%95%E5%AE%89%E5%85%A8%E5%9C%B0%E9%9A%8F%E6%9C%BA%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E5%AD%97%E7%AC%A6%E7%9A%84%E9%A1%BA%E5%BA%8F%EF%BC%9F.png)
[user@notebook ~]$ echo 'aabcd' | sed 's/\(.\)/\1\n/g' | perl -MList::Util -e 'print List::Util::shuffle <>' | perl -pe 's/\n//g';
cdaab[user@notebook ~]$ echo 'aabcd' | sed 's/\(.\)/\1\n/g' | perl -MList::Util -e 'print List::Util::shuffle <>' | perl -pe 's/\n//g';
dbaac[user@notebook ~]$ echo 'aabcd' | sed 's/\(.\)/\1\n/g' | perl -MList::Util -e 'print List::Util::shuffle <>' | perl -pe 's/\n//g';
cbada[user@notebook ~]$ echo 'aabcd' | sed 's/\(.\)/\1\n/g' | perl -MList::Util -e 'print List::Util::shuffle <>' | perl -pe 's/\n//g';
adcba[user@notebook ~]$
AFAIK 这是一种随机化字符串顺序的安全方法。但只用一个 perl 命令就能完成吗?
答案1
这取决于“一个 perl 命令”的含义。这当然可以通过对你的方法进行一些重构来完成:
echo abcde | perl -MList::Util=shuffle -lpe '$_ = join "", shuffle split //'