将带有命令替换的 sed 输出存储到变量中

Store output of sed with command substitution in it into a variable

考虑一个字符串

Message="Hello WoRld"

我想用小写 r

替换大写 R
echo "$Message" > file.txt
NewMessage=$(sed 's/R/r/' file.txt)

工作正常!以下内容也适用

NewMessage=$(echo ${Message} | sed 's/R/r/')

但我的第一反应是使用命令替换

NewMessage=$(sed 's/R/r/' <("$Message"))

但它不起作用。为什么不起作用?

您的 cmd-sub 版本 缺少前导 M

但是你想要

NewMessage=$(sed 's/R/r/' <(echo "$Message"))

或者您的 shell 可能支持

NewMessage=$(sed 's/R/r/' <<< "$Message")

编辑

最简单、最广泛支持的解决方案会简单得多

NewMessage=$(echo "$Message" | sed 's/R/r/') 

如果您需要与 Bourne Shell(正确的 /bin/sh)绝对的石器时代兼容性,那么您将不得不放弃漂亮的 $(..cmdSub) 语法并使用反引号作为命令-替换:

NewMessage=`echo "$Message" | sed 's/R/r/'` 

IHTH

如果您正在使用 bash 4,则不需要 sed:

NewMessage=${Message,,R}