Bashで文字列の文字をスクランブルする方法は?

Bashで文字列の文字をスクランブルする方法は?

ランダムなパスワードを生成しますが、パスワードを混在させる必要があるスクリプトがあります。これを行う方法が見つかりません。助けてください。

num=("0" "1" "2" "3" "4" "5" "7" "8" "9")
special=("@" "#" "$" "%" "*" "-" "+")
upper=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
lower=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
lower2=${#lower[*]}   #${lower[$((RANDOM%lower2))]}
upper2=${#upper[*]}   #${upper[$((RANDOM%upper2))]}
num2=${#num[*]}     #${num[$((RANDOM%num2))]}
special2=${#special[*]} #${special[$((RANDOM%special2))]}
echo "${special[$((RANDOM%special2))]}${num[$((RANDOM%num2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}"

出力は次のとおりです。@7nOyIaJ ランダムに抽出するには?

ベストアンサー1

「特別」が常に最初に出てくるので、ランダムにしたいとします。これは途方もないハッキーアプローチです。メモ:あなたのスクリプトはですscr.bash

$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')

はい

$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
qT*Jyv8Y

$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
QbOvX3n-

$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
*Q5nGgIt

これは粗雑ですが、道を示しています。

詳細

このfoldコマンドは出力を1行に1文字に分割します。他の方法もありますが、私はこれを選択しましたfold。このshufコマンドは、行をランダムな順序で「混合」します。このコマンドは、最初に作成した折りたたみからtr改行()を削除します。\n

おすすめ記事