我有一个 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
。