替换变量中的值并在 BASH 中保留新行

替换变量中的值并在 BASH 中保留新行

此 BASH 脚本按预期工作。我有一个包含数据行的变量 ($foo),我告诉 bash 在新行中分隔,然后循环访问该变量。

#!/bin/bash 

foo="
Original Line1
Original Line2
Original Line3
"

IFS=$'\n'

for line in $foo
do
  echo $line
done

正如预期的那样,数据在它自己的线上。

Original Line1
Original Line2
Original Line3

我将此行添加到脚本中,以将 $foo 变量中的文本“Line2”替换为“EXAMPLE”。

foo=$( echo $foo | sed "s|Line2|EXAMPLE|" )

当我运行脚本时,数据不再在其自己的行上分隔,而是在一行上打印。我不确定如何替换变量中的值并保留新行。

Original Line1 Original EXAMPLE Original Line3

答案1

未加引号的变量$foo会受到 shell 的分词,详细解释见为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?

使用引号可以防止:

echo "$foo" | sed "s|Line2|EXAMPLE|"

请注意,您实际上并不需要sed如此简单的替换 - 您可以使用 shell 替换

foo="${foo/Line2/EXAMPLE}"

相关内容