Bash

替換變數中的值並在 BASH 中保留新行

  • October 11, 2018

此 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

您的未引用變數$foo會受到 shell 的分詞,如為什麼我的 shell 腳本會因空格或其他特殊字元而窒息?.

使用引號可以防止:

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

請注意,您實際上並不需要sed如此簡單的替換 - 您可以使用 shell 替換

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

引用自:https://unix.stackexchange.com/questions/474814