You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:49:39