一部の変数を画面に印刷する必要がありますが、最初の数文字を難読化するのが最善です。端末に印刷するときに秘密の値の最初の文字を難読化できるbashのechoコマンドがあるかどうか疑問に思います。
echo 'secretvalue'
********lue
ベストアンサー1
1つのオプションは、強制的に関数を代わりに使用することですecho
。たとえば、次のようになります。
obfuprint() {
if [ "${#1}" -ge 8 ]
then
printf '%s\n' "${1/????????/********}"
else
printf '%s\n' "${1//?/*}"
fi
}
obfuprint 'secretvalue'
その後、電話をかけたり受けたりすることができます********lue
(末尾の改行を含む)。この関数は引数拡張を使用して渡された値の最初の8文字を検索し、それを8つのアスタリスクに置き換えます。受信値が8文字未満の場合は、すべてアスタリスクに置き換えられます。ありがとうイルカチョ8文字以上の文字入力の初期仮定をご指摘いただきありがとうございます!
からインスピレーションを受ける柔軟なブロックに対するilkkachuの回答、文字列の特定の割合をランダムにマスクするバリエーションを追加するのは楽しいだろうと思いました。
obfuprintperc () {
local perc=75 ## percent to obfuscate
local i=0
for((i=0; i < ${#1}; i++))
do
if [ $(( $RANDOM % 100 )) -lt "$perc" ]
then
printf '%s' '*'
else
printf '%s' "${1:i:1}"
fi
done
echo
}
これは$RANDOM
特別なbash変数に依存します。入力の各文字を繰り返し、文字をマスクするか印刷するかを決定します。出力例:
$ obfuprintperc 0123456789
0*****6*8*
$ obfuprintperc 0123456789
012***678*
$ obfuprintperc 0123456789
**********
$ obfuprintperc 0123456789
*****56***
$ obfuprintperc 0123456789
0*******8*