如何在shell脚本中添加缩进

时间:2014-04-18 16:16:59

标签: linux bash while-loop indentation

我写了以下脚本:

while read ligne;
do 
    echo ${ligne} >> /tmp/test.conf; 
    other code lines but it's not our probem.
done  < <(cat file.conf | sed -ne '/toto/,$p');

file.conf包含类似的数据:

test1 {
  var2 {}
}
toto {
  var1 {
    next {}
  }
}

脚本必须写入文件/tmp/test.conf

toto {
  var1 {
    next {}
  }
}

带缩进。

今天我到达了这个结果:

toto {
var1 {
next {}
}
}

我尝试通过添加IFS变量来修改我的脚本:

(IFS='\n';
while read ligne;
do 
    echo ${ligne} >> /tmp/test.conf; 
    other code lines but it's not our probem.
done  < <(cat file.conf | sed -ne '/toto/,$p'));

我有缩进,但结果中的所有n个字母都已删除。

toto {
  var1 {
    ext {}
  }
}

为什么呢?我该如何解决?

2 个答案:

答案 0 :(得分:1)

您可以在IFS=之前使用read这个循环:

while IFS= read -r ligne; do
   echo "$ligne" >> /tmp/test.conf
done < <(sed -ne '/toto/,$p' file.conf)

或者确保内部变量REPLY

while read; do
   echo "$REPLY" >> /tmp/test.conf
done < <(sed -ne '/toto/,$p' file.conf)

答案 1 :(得分:0)

IFS必须设置为空字符串,而不是换行符:

(IFS='';
while read ligne;
do 
    echo ${ligne} >> /tmp/test.conf; 
    # other code lines but it's not our probem.
done  < <(cat file.conf | sed -ne '/toto/,$p'));