此 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}"