एक विकल्प अपने आप को इसके बजाय एक समारोह का उपयोग करने के लिए मजबूर करना होगा echo
, जैसे:
obfuprint() {
if [ "${#1}" -ge 8 ]
then
printf '%s\n' "${1/????????/********}"
else
printf '%s\n' "${1//?/*}"
fi
}
तब आप कॉल कर सकते हैं obfuprint 'secretvalue'
और प्राप्त कर सकते हैं ********lue
(अनुगामी न्यूलाइन के साथ)। फ़ंक्शन पास-इन मान के पहले आठ वर्णों की खोज के लिए पैरामीटर विस्तार का उपयोग करता है और उन्हें आठ तारांकन के साथ बदलता है। यदि आवक मान आठ वर्णों से कम है, तो वे सभी तारांकन के साथ बदल दिए जाते हैं। आठ या अधिक चरित्र इनपुट की मेरी प्रारंभिक धारणा को इंगित करने के लिए ilkachach का धन्यवाद !
Ilkachachu के लचीले मास्किंग जवाब से प्रेरित होकर , मैंने सोचा कि यह एक भिन्नता जोड़ना दिलचस्प होगा जो बेतरतीब ढंग से स्ट्रिंग के कुछ प्रतिशत को मास्क करता है:
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
विशेष चर पर निर्भर करता है ; यह बस इनपुट के प्रत्येक चरित्र के माध्यम से लूप करता है और यह तय करता है कि उस चरित्र को मुखौटा करना है या इसे प्रिंट करना है। नमूना उत्पादन:
$ obfuprintperc 0123456789
0*****6*8*
$ obfuprintperc 0123456789
012***678*
$ obfuprintperc 0123456789
**********
$ obfuprintperc 0123456789
*****56***
$ obfuprintperc 0123456789
0*******8*