Answers:
使用内联外壳字符串替换。例:
foo="  "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
有关更多详细信息,请参见http://tldp.org/LDP/abs/html/string-manipulation.html。
tr!...取决于可用的内存和硬件资源...但是您是对的!:根据要执行的工作,专用工具可以保持更高的效率!
                    $'\n'
                    您可以这样使用tr:
tr " " .
例:
# echo "hello world" | tr " " .
hello.world
来自man tr:
描述
翻译,压缩和/或删除标准输入中的字符,写到标准输出。
在bash中,您可以使用该构造在字符串中进行模式替换${VARIABLE//PATTERN/REPLACEMENT}。使用just /而不是//只替换第一个匹配项。该模式是通配符模式,例如文件全局。
string='foo bar qux'
one="${string/ /.}"     # sets one to 'foo.bar qux'
all="${string// /.}"    # sets all to 'foo.bar.qux'
              
tr对于长字符串可能更喜欢。在我的系统上,trbash的性能优于以多个1000字符开头的字符串。好像bash的时间复杂度比线性差。一个小测试:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}"。用1M的字符串长度(= 2 ^ 20)tr采取了0.04s和bash 5.0.11了17s。2Mtr占用了0.07s(预期),但bash占用了69s(四倍于字符串长度的两倍)。