如何在Bash中移除变量字符串中的所有下划线?
为什么
${myVar//_}会报"Bad substitution"? 这个问题我太熟啦!你写的${myVar//_}是Bash专属的全局替换语法,如果你的脚本是用POSIX标准的sh(比如很多Linux系统里sh其实是dash,不是Bash)运行的,就会触发这个错误——因为POSIX sh不支持这种扩展替换写法。
解决方法分两种情况:
1. 直接用Bash运行(推荐,更简洁)
- 如果你是在终端里直接输命令,先确认当前用的是Bash:运行
echo $SHELL,如果输出是/bin/bash就没问题;如果不是,输入bash切换到Bash环境再执行你的替换命令。 - 如果是脚本,把脚本开头的shebang改成
#!/bin/bash,而不是#!/bin/sh,然后用bash your_script.sh或者直接./your_script.sh(记得加执行权限chmod +x your_script.sh)运行。
2. 兼容POSIX sh的写法(如果必须支持所有shell)
如果你的脚本需要在POSIX标准的sh里也能跑,就用tr或者sed工具来实现移除下划线:
- 用
tr(更高效,适合单个字符替换):myVar=$(echo "$myVar" | tr -d '_') - 用
sed(适合更复杂的正则替换):myVar=$(echo "$myVar" | sed 's/_//g')
小验证
比如你原来的变量是foo1234_,不管用哪种方法,执行后echo $myVar都会输出foo1234,完美移除所有下划线~
内容的提问来源于stack exchange,提问作者jlnkls
相关产品推荐
相关产品推荐

