bash脚本中的模糊字符串

dan*_*ast 1 bash sed tr

我正在尝试执行以下操作:

obscure ( ) {
    local txt="$1"
    echo "$txt" | tr '[:alnum:]' '*'
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

obscure 'mysecretstring'
Run Code Online (Sandbox Code Playgroud)

我明白了:

**************
Run Code Online (Sandbox Code Playgroud)

我可以使用什么匹配器tr,而不是[:alnum:]意味着"任何角色"?

有更好的实施方式obscure吗?想到的另一个选择是sed.

anu*_*ava 7

你可以使用纯BASH:

obscure() {
   local txt="$1"
   echo "${txt//?/*}"
}
Run Code Online (Sandbox Code Playgroud)

"${txt//?/*}"将替换$txtby中的每个字符*

测试一下:

obscure 'mysecretstring3123213213'
************************

obscure mysecretstring
**************

obscure '!@#$%^&*()_+=-'
**************

obscure '???'
***
Run Code Online (Sandbox Code Playgroud)

  • 你甚至不需要局部变量:`echo "${1//?/*}"` 也能工作。 (2认同)