Bir seçenek kendinizi aşağıdaki echo
gibi bir işlevi kullanmaya zorlamak olacaktır :
obfuprint() {
if [ "${#1}" -ge 8 ]
then
printf '%s\n' "${1/????????/********}"
else
printf '%s\n' "${1//?/*}"
fi
}
Sonra arayabilir obfuprint 'secretvalue'
ve alabilirsiniz ********lue
(sondaki bir yeni satır ile). İşlev, geçirilen değerin ilk sekiz karakterini aramak için parametre genişletmeyi kullanır ve bunları sekiz yıldız işareti ile değiştirir. Gelen değer sekiz karakterden daha kısaysa, bunların yerine yıldız işaretleri konur. İlkkachu sayesindeİlk sekiz veya daha fazla karakter girişi varsayımımdan için !
İlkkachu'nun esnek maskeleme cevabından esinlenerek, dizenin bir yüzdesini rastgele maskeleyen bir varyasyon eklemenin ilginç olacağını düşündüm:
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
}
Bu, bash'ın $RANDOM
özel değişkenine dayanır ; yalnızca girişin her karakterini dolaşır ve o karakterin maskelenmesine veya yazdırılmasına karar verir. Örnek çıktı:
$ obfuprintperc 0123456789
0*****6*8*
$ obfuprintperc 0123456789
012***678*
$ obfuprintperc 0123456789
**********
$ obfuprintperc 0123456789
*****56***
$ obfuprintperc 0123456789
0*******8*