Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在shell脚本上使用echo保留前导空格?_Bash_Shell_Unix_Scripting - Fatal编程技术网

Bash 如何在shell脚本上使用echo保留前导空格?

Bash 如何在shell脚本上使用echo保留前导空格?,bash,shell,unix,scripting,Bash,Shell,Unix,Scripting,我有一个源文件,它是合并在一起的多个文件的组合。我的脚本应该将它们分离到原始的单个文件中 每当我遇到以“FILENM”开头的行时,这意味着它是下一个文件的开始 文件中的所有详图线都是固定宽度的;所以,我现在遇到了一个问题,一个以前导空格开头的行在不应该被截断的时候被截断了 如何增强此脚本以保留前导空格 while read line do lineType=`echo $line | cut -c1-6` if [ "$lineType" ==

我有一个源文件,它是合并在一起的多个文件的组合。我的脚本应该将它们分离到原始的单个文件中

每当我遇到以“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
读取行时
做
线型=`echo$line |切割-c1-6`
如果[“$lineType”==“FILENM”];然后
fileName=`echo$line | cut-c7-`
其他的
回显“$line”>>$filePath/$fileName
fi

done删除前导空格,因为
read
将输入拆分为单词。要解决此问题,请将
IFS
变量设置为空字符串。像这样:

OLD_IFS="$IFS"
IFS=
while read line         
do
    ...
done <$filePath/sourcefile
IFS="$OLD_IFS"
OLD_IFS=“$IFS”
如果=
读行时
做
...

完成要保留
IFS
变量,您可以在
时以以下方式写入

而IFS=读取行
做
. . .
完成<文件

另外,要保留反斜杠,请使用
read-r
选项。

你应该因此获得奥斯卡奖。