bash中的字符串替换 - 错误的替换错误

Ari*_*hys 11 linux bash

我是bash脚本的新手,但我不理解为什么它不起作用

#!/bin/bash
foo=foobarfoobar
echo ${foo//bar/baz}
Run Code Online (Sandbox Code Playgroud)

第3行的错误替换错误

Chr*_*ris 51

这种替换在Bash 4.2.8中运行良好(根据文档看起来很好).

我最好的猜测是你实际上并没有使用Bash - 你是如何调用脚本的?如果你正在做,sh script.sh你可能正在用Dash或类似的东西运行它(而Dash确实在第3行给出了替换错误).尝试使用Bash(bash script.sh)显式运行它.

如果事实证明你实际上正在使用Dash,那么有一些关于差异的有用信息以及如何回到使用Bash(如果你愿意)这里:https://wiki.ubuntu.com/DashAsBinSh

  • 如果在命令行上你做了`sh scriptname`,那么`sh`是ubuntu中`dash`的链接.+1到@Chris (4认同)
  • 钱币.上帝保佑Debian维护者,但这是微妙和令人困惑的.如果<< sh >>调用生成错误以某种方式包含Dash而不是Bash正在使用的警告,那将是很好的. (2认同)