我是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,这有效。