如何在Shell脚本中使用echo命令保留前导空格?

14

我有一个源文件,是多个文件合并而成的。我的脚本应该将它们分离成原始单独的文件。

每当我遇到以"FILENM"开头的行时,就意味着下一个文件的开始。

所有文件中的详细行都是固定宽度的;所以,我目前遇到的问题是,当一行以前导空格开头时,它被截断了,而不应该被截断。

如何改进这个脚本来保留前导空格?

while read line         
do         
    lineType=`echo $line | cut -c1-6`
    if [ "$lineType" == "FILENM" ]; then
       fileName=`echo $line | cut -c7-`
    else
       echo "$line" >> $filePath/$fileName
    fi   
done <$filePath/sourcefile
2个回答

23

由于read命令将输入分割成单词,因此会删除前导空格。为了解决这个问题,可以将IFS变量设置为空字符串,具体如下:

OLD_IFS="$IFS"
IFS=
while read line         
do
    ...
done <$filePath/sourcefile
IFS="$OLD_IFS"

15
为了保留IFS变量,您可以按照以下方式编写while循环代码:
while IFS= read line
do
    . . .
done < file

为了保留反斜杠,请使用 read -r 选项。


你应该获得奥斯卡奖。 - xdevs23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接