String Bash字符串更改单词的一部分

String Bash字符串更改单词的一部分,string,bash,shell,substitution,String,Bash,Shell,Substitution,在bash中打印之前,我需要更改字符串。所以我做了: ${RETEZEC//./D} 现在我需要再更改一件事,-的。但不知道如何添加到那里?在相同的步骤中,类似于$`{RETEZEC//./D;/-/-/},我需要一个额外的exeption来表示-?您可以使用: s='abc-def-foo' echo "${s//-/_}" abc_def_foo 无法嵌套参数展开,需要两个表达式: foo=${RETEZEC//./D} echo "${foo//-/_}" 但是,您可以使用外部工具来

bash
中打印之前,我需要更改字符串。所以我做了:

${RETEZEC//./D}
现在我需要再更改一件事,
-
。但不知道如何添加到那里?在相同的步骤中,类似于$`{RETEZEC//./D;/-/-/},我需要一个额外的exeption来表示-?

您可以使用:

s='abc-def-foo'
echo "${s//-/_}"
abc_def_foo

无法嵌套参数展开,需要两个表达式:

foo=${RETEZEC//./D}
echo "${foo//-/_}"
但是,您可以使用外部工具来实现这一点,但我建议您坚持使用上面的本机shell解决方案

$ echo "foo.-bar" | tr '.-' 'D_'
fooD-bar

看起来您想用
D
替换
,用
替换
-

正如其他人所评论的,你不能一步到位。但是您可以使用
tr

$ echo "$RETEZEC"
hel-lo_a.b.
$ tr '.-' 'D_' <<< "$RETEZEC"
hel_lo_aDbD
$echo“$RETEZEC”
hel-lo_a.b。

$tr'.-'D_'有回声“${RETEZEC//./D}”,请用相关信息更新您的问题,而不是对您的答案进行评论。是的,但我想一步更改。对于D和-for@Vrsi,使用参数展开是不可能的。对,我可以在什么地方做一个例外吗?就像有一个-我不想改变,但其他人是的。@Vrsi根据您的实际需求更新您的问题,您在这里非常模糊。方括号不应该用于
tr
$ RETEZEC=$(tr '.-' 'D_' <<< "$RETEZEC")
$ echo $RETEZEC
hel_lo_aDbD