この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|" )
スクリプトを実行すると、データは 1 行に分割されず、1 行に印刷されます。変数の値を変更して新しい行を維持する方法がわかりません。
Original Line1 Original EXAMPLE Original Line3
ベストアンサー1
引用符のない変数は$foo
シェルごとに分割されます。詳細については、以下を参照してください。スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?。
引用符を使用すると、次のことを回避できます。
echo "$foo" | sed "s|Line2|EXAMPLE|"
実際には、これらの簡単な交換は必要ありませんsed
。シェル交換を使用できます。
foo="${foo/Line2/EXAMPLE}"