考虑一个字符串
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"))
但它不起作用。为什么它不起作用?
答案 0 :(得分:3)
你的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
答案 1 :(得分:3)
如果您使用bash
4,则不需要sed
:
NewMessage=${Message,,R}