변수의 값을 바꾸고 BASH에 새 줄을 유지합니다.

변수의 값을 바꾸고 BASH에 새 줄을 유지합니다.

이 BASH 스크립트는 예상대로 작동합니다. bash에게 새 줄을 구분하고 변수를 반복하도록 지시하는 데이터 행이 포함된 변수($foo)가 있습니다.

#!/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셸별로 분할됩니다. 자세한 설명은 다음을 참조하세요.공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?.

따옴표를 사용하면 다음을 방지할 수 있습니다.

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

실제로는 이러한 간단한 교체가 필요하지 않습니다 sed. 쉘 교체를 사용할 수 있습니다.

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

관련 정보