在bash中,用固定字符替换字符串的每个字符("blank out"一个字符串)

In bash, replace each character of a string with a fixed character ("blank out" a string)

MWE:

caption()
{
    echo "$@"
    echo "$@" | sed 's/./-/g'  # -> SC2001
}

caption "$@"

我想使用参数扩展来消除 shellcheck 错误。我的最佳想法是使用 echo "${@//?/-}",但这并不能替代空格。

有什么想法吗?

您可以使用$*将其保存在局部变量中:

caption() {
   local s="$*"
   printf '%s\n' "$s" "${s//?/-}"
}

测试:

caption 'SC 2001' foo bar

SC 2001 foo bar
---------------