使用 Bash 替换变量中的字符串

问题描述 投票:0回答:3

我想替换变量中的字符串,例如:

Test=Today, 12:34

我想用我之前声明的

Test
变量替换变量
Date
中的“今天”。

我尝试使用

sed
命令:

sed -i -e "s/Today/$Date" '$Test'

但是它只会打印出错误并且文件

'$Test'
未知。
sed
只能用于文本文件吗?

string bash variables replace
3个回答
11
投票

首先,这是一个语法错误。

$: Test=Today, 12:34
bash: 12:34: command not found

引用一些内容。

$: Test="Today, 12:34"
$: Test='Today, 12:34'
$: Test=Today,\ 12:34

然后你就可以使用

bash
内置的参数扩展:

$: Test='Today, 12:34'
$: Date=12.12.2000
$: Test="${Test/Today/$Date}"
$: echo "$Test"
12.12.2000, 12:34

8
投票

这对我有用:

Test="Today, 12:34"
Date=12.12.2000
sed 's/Today/'"$Date"'/g' <<<"$Test"

编辑:如果您想更改变量 Test,如评论中提到的,您需要分配:

Test="Today, 12:34"
Date=12.12.2000
Test=$(sed 's/Today/'"$Date"'/g' <<<"$Test")

3
投票

为此,您不需要使用任何

sed
,而是可以利用 Bash 鲜为人知但极其方便的功能,称为 参数扩展,如此处所述。我只知道这个,因为它在一次工作面试中出现过一次,面试官与我分享了它,然后让我清理地板上的大脑......

Test='Today, 12:34'
Date='12.12.2000'
echo "${Test/Today/$Date}"
---
12.12.2000, 12:34

正如我所说,这让我在那次面试中大吃一惊。我没有得到这份工作,但从那以后我几乎每天都使用这个功能。

© www.soinside.com 2019 - 2024. All rights reserved.