【问题标题】:How do I preserve leading whitespaces with echo on a shell script?如何在 shell 脚本上使用 echo 保留前导空格?
【发布时间】:2013-08-05 23:28:00
【问题描述】:

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

每当我遇到以“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

【问题讨论】:

    标签: bash shell unix scripting


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      要保留IFS 变量,您可以按以下方式编写while:

      while IFS= read line
      do
          . . .
      done < file
      

      还可以使用read -r 选项保留反斜杠。

      【讨论】:

      • 你应该为此获得奥斯卡奖。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      相关资源
      最近更新 更多