echo 不在 bash 中打印变量

echo does not print a variable in bash

我遇到了一个非常奇怪的问题。我有 2 个文件 ber_log_before.txt 和 ber_log_after.txt。他们的内容是

ber_log_before.txt

$
BOAR 0 BER:14
BOAR 1 BER:19
BOAR 2 BER:0
BOAR 3 BER:0
BOAR 4 BER:0
BOAR 5 BER:0
BOAR 6 BER:0
BOAR 7 BER:0

$

ber_log_after.txt

$
BOAR 0 BER:24
BOAR 1 BER:29
BOAR 2 BER:0
BOAR 3 BER:0
BOAR 4 BER:0
BOAR 5 BER:0
BOAR 6 BER:0
BOAR 7 BER:0

$

$个很正常

然后我写了一个基本的bash命令来解析它们

PORT="0 1"
for port in $PORT; do
    VAL1=$(grep "BOAR $port" ber_log_before.txt | cut -f2 -d':')
    VAL2=$(grep "BOAR $port" ber_log_after.txt  | cut -f2 -d':')
    echo 1st val ${VAL1} 2em val ${VAL2}
done

为什么1st val 14 2em val 24没有回显???

如果我替换

echo 1st val ${VAL1} 2em val ${VAL2}

来自

echo 1st val ${VAL1}
echo 2em val ${VAL2}

那么至少我有 2em val 回显。

我想 awk 可以完成这项工作,但这不是问题所在。

这其实不是问题,或者是我的问题。我提到的两个文件都是从 telnet 会话创建的(使用 expect 命令更具体)。所以所有行都以 \r 结尾,当然 echo 1st val 14\r 2em val 24\r 将 'overwrite' 回显的第一部分。所以我把\r换成\n就ok了

为了理解这个问题,我将命令复制到脚本中并使用 set -x。很容易找到 \r.

抱歉这个愚蠢的问题。