📅  最后修改于: 2023-12-03 15:36:34.198000             🧑  作者: Mango
在 Shell-Bash 编程中,使用 sed
命令进行字符串替换是非常常见的操作。但是有时候,我们在使用 sed
命令分配变量时会遇到一些问题,导致变量没有被正确地赋值,本文将从以下几个方面向大家介绍这个问题:
在 Shell-Bash 编程中,我们可以使用 sed
命令将某个字符串替换成我们需要的字符串,同时,我们还可以利用sed
命令将替换后的字符串赋值给一个变量。下面是一个示例代码:
#!/bin/bash
str="hello world"
new_str=$(echo $str | sed 's/hello/hi/')
echo $new_str
上面的代码将 hello world
中的 hello
替换成了 hi
并将结果赋值给 new_str
,最后输出这个变量的值。但是,当我们将上面的代码保存成 test.sh
并执行时,发现并没有正确输出 hi world
。这是为什么呢?
原因就是 sed
命令中的替换操作会在新的子进程中执行,而赋值操作却是在主进程中执行,这就导致了变量没有被正确地赋值。
为了解决这个问题,我们需要将 sed
命令的输出重定向到标准输出中,这样主进程就能正确获取到输出值并将其赋值给变量。
以下是修改后的示例代码:
#!/bin/bash
str="hello world"
new_str=$(echo $str | sed 's/hello/hi/' 2>&1)
echo $new_str
上面的代码使用了 2>&1
将 sed
命令的标准错误输出重定向到标准输出,这样就能确保在主进程中正确地获取到输出值并将其赋值给变量。
以下是完整的示例代码:
#!/bin/bash
str="hello world"
new_str=$(echo $str | sed 's/hello/hi/' 2>&1)
echo $new_str
在 Shell-Bash 编程中,使用 sed
命令分配变量时,需要注意 sed
命令的子进程和主进程之间的区别,并将输出重定向到标准输出中,以确保变量能正确地被赋值。