使用bash从txt文件中读取变量

使用bash从txt文件中读取变量

我是bash新手。

我正在尝试编写一个脚本,该脚本将从文本查找中读取数据并声明一些变量。在下面的示例中,我们从制表符分隔的文件“ab.txt”中读取,如下所示:

a->AA

b->BB

其中 -> 表示选项卡。

我正在使用以下代码读取这些数据:

#!/bin/bash
while read line
do
    tmp=(${line///})
    fieldName=${tmp[0]}

    case $fieldName in
    "a")
        a=${tmp[1]}
        ;;
    "b")
        b=${tmp[1]}
        ;;
    esac

done < "ab.txt"


echo "a:"
echo $a 

echo "b:"
echo $b

echo "concat a,b"
echo $a$b

echo "concat b,a"
echo $b$a

这很好地给了我“a”和“b”,但不会连接a和b!输出是这样的:

a:
AA
b:
BB
concat a,b
BB
concat b,a
AA

我究竟做错了什么?

答案1

@steedriver 发现了问题:在 Windows 中,行尾有转义字符,而 Linux 没有。我在windows中创建了输入文本文件ab.txt,因此linux将多余的字符读入a、b变量中。我的解决方案是使用 dos2unix 转换 ab.text,这有效。

相关内容