【问题标题】:Replace String in variable using bash使用 bash 替换变量中的字符串
【发布时间】:2020-12-21 17:55:41
【问题描述】:

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

Test=Today, 12:34

我想用我之前声明的日期变量替换变量 Test 中的“今天”。

我尝试使用“-sed”命令,

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

但它只会打印出一个错误并且文件'$Test'是未知的。那么使用 sed 只能使用文本文件吗?

亲切的问候, X3nion

【问题讨论】:

  • $Test 不是文件。您可以使用:sed '....' <<< "$Test" 或更好地在 bash 中使用 "${Test/Today/$Date}"
  • 除了@anubhava 所说的,请注意在bash 中,单引号中的变量扩展不起作用。如果要扩展 Test 变量,可以不加引号 $Test 或将其放在双引号 "$Test" 中。如果您使用单引号,它将被视为字符串文字。
  • 当我只写命令“${Test/Today/$Date}”时,这不起作用。我错过了什么?
  • "${Test/Today/$Date}" 不是命令,而是生成字符串的表达式。您需要对该字符串执行一些操作,例如为其设置一个变量(Test="${Test/Today/$Date}" 将用修改后的版本替换 Test 的当前值)、打印它(echo "${Test/Today/$Date}")或类似的东西。

标签: string bash variables replace


【解决方案1】:

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

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

引用一些内容。

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

然后你可以使用内置的bashparameter parsing.

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

【讨论】:

    【解决方案2】:

    这对我有用:

    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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2015-01-29
      • 2014-12-31
      • 2016-09-13
      • 2018-04-04
      • 2019-03-28
      • 2020-07-09
      相关资源
      最近更新 更多