bash 搜索和替换替换多余的字符

bash 搜索和替换替换多余的字符

我正在尝试使用 bash 的参数扩展来替换美元符号,但遇到了麻烦。我尝试了各种方法,但都没有奏效,我做错了什么?示例:

in_amt="($12.34)"
amt=${in_amt/$/}
echo $amt      

生成 (2.34) - 美元符号和后面的“1”被删除

我试过了:

amt=${in_amt/[$]/[]}
amt=${in_amt/[$]}
amt=${in_amt/[\$]}
amt=${in_amt/\$}
amt=${in_amt/(\$/(}

并且可能还有其他变体都具有相同的结果。这发生在两个版本的 bash 上:3.2(Macbook Air)和 5.0.17(Ubuntu 20.04)。

替换“正常”字符有效。

答案1

您应该在单引号中设置初始赋值,因为否则字符串$1会被 shell 解释

in_amt='($12.34)'
amt=${in_amt/$/}
echo $amt      

或者逃避$标志:

in_amt="(\$12.34)"

相关内容