我有一个文件,其内容如下:
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"
,它什么也没打印。
这是为什么?我该怎么办?
答案 0 :(得分:1)
那是因为输入文件的MSWin行结尾。特殊字符$'\r'
被解释为“转到行开始”,因此-> $FOO
覆盖了$toReplace
部分。
通过dos2unix
或fromdos
运行输入文件。