填充并仅显示 masked/password/secret 变量值的最后 N 个字符

Padding and show only the last N characters of a masked/password/secret variable's value

我想提示用户输入一个秘密值(例如:密码变量、信用卡、一些 key/token)并想看看是否有办法显示最后一个 N(比方说该变量值的 4 个字符)。

例如: 输入您的信用卡# : 1234567898765432

我可以使用 ex stty -echo/echo 的包装器来隐藏用户将输入或使用的内容 read -s variable 并且它会隐藏值但我想要的是只显示最后一个 N(对于例如:4)这个变量的字符,即 如果我说 $ echo $mySecretVariable (不确定我是否真的必须编写一个函数)那么它会将值回显为: ************5432 或者你的令牌键值最后 4 以 *******************C5fx 类似的结尾其中所有字符都将用 * 填充,并且只会显示最后一个 N。

您可以使用这个 bash 函数来屏蔽除最后 4 个字符之外的所有字符:

mask() {
   local r="${1?needs an argument}"
   if ((${#r} > 4)); then
      r="${r:0: -4}"
      echo "${r//?/*}${1: -4}"
   else
      echo "$r"
   fi
}

然后将其用作:

mask 1234567898765432
************5432

mask 123
123

mask 123456
**3456