打印包含哈希的变量不会给我任何输出

时间:2018-10-11 09:40:23

标签: bash

我有一个文件,其内容如下:

FOO=#{Foo}

# may contain blank lines or lines with comments
BAR=#{Bar}

现在,我想对那些需要我将FOO#{Foo}视为独立实体的东西做些事情。因此,我尝试了以下操作,以确保获得所需的数据:

#!/bin/bash

while read -r line; do
  variable="${line%\=*}"
  toReplace="${line#*\=}"

  echo "$toReplace"
  printf "%s -> \$%s\n" "$toReplace" "$variable"
done < <(grep '=' myfile)

令我惊讶的是,它输出以下内容:

#{Foo}
 -> $FOO
#{Bar}
 -> $BAR

如您所见,该行的toReplace部分没有被打印,尽管它显然已被正确提取。

我还尝试了echo -n "$toReplace",它什么也没打印。

这是为什么?我该怎么办?

1 个答案:

答案 0 :(得分:1)

那是因为输入文件的MSWin行结尾。特殊字符$'\r'被解释为“转到行开始”,因此-> $FOO覆盖了$toReplace部分。

通过dos2unixfromdos运行输入文件。