Bash 脚本在 awk 中打印美元符号和 \r

Bash 脚本在 awk 中打印美元符号和 \r

我有一个 bash 脚本,它是 cat'ing,然后使用 awk 来获取一些变量 - 第一个工作正常,但第二个有一个前导 $ 和一个尾随 \r ...想法?

#!/bin/bash
newTS=$( cat times.txt | awk -F';' '{print $2}')
ctime=$( cat times.txt | awk -F';' '{print $3}')
 echo 'nextTime='$newTS
 echo 'currentTime='$ctime

为什么 echo 命令会导致

+ echo $'currentTime=2020-04-21T12:36:14\r'

第一个 awk 哪里没有?

+ echo nextTime=2020-04-21T11:46:11

必须是带有引号或变量扩展的东西?

这是我的 times.txt 文件:

2020-04-21T11:45:11;2020-04-21T11:46:11;2020-04-21T12:36:14

答案1

您的输入文件是 DOS 文本文件。这意味着 Unix 工具看到的每行的最后一个字符是回车符(通常写作\r)。

您可以\r从第二个程序的输出中得到它awk,因为它是该行的第三个字段的一部分。它不在第二个字段中,因为第二个字段不在行尾,因此第一个awk程序不会生成\r其中包含的字符串。

您还可以用来bash -x运行脚本。这使得能够跟踪(调试)来自 shell 的输出。当 shell 输出包含特殊字符(例如回车符)的命令跟踪时,它会(?)将关联的字符串引用为“C 字符串”,即作为$'...'

使用例如将输入数据文件转换为 Unix 文本文件dos2unix

相关内容