zl程序教程

您现在的位置是:首页 >  工具

当前栏目

shell中tr命令遇到的小问题记录

命令shell 记录 遇到 tr 问题
2023-09-14 09:15:40 时间

在编写shell解析脚本的时候,用到了tr命令。在使用tr命令的过程中遇到了一个小问题,起初百思不得其解,甚至一度想绕过问题,后来在一点点跟进排查的努力下,终于找到了问题所在。实际上是一处很低级的错误,但很容易犯这个错误。因此把它记录在此。

脚本代码如下:

#!/bin/bash

k="111
222
333
444"

echo "k is: $k"

echo "output1:"
kkk=`echo "$k" | tr -d '\n'`
echo "kkk is: $kkk"

echo "output2:"
kk=`echo $k | tr -d '\n'`
echo "kk is: $kk"

脚本执行结果如下:

$ ./tr_test.sh 
k is: 111
222
333
444
output1:
kkk is: 111222333444
output2:
kk is: 111 222 333 444

脚本中tr的作用很简单:去掉字符串kkk中的换行符。把4行内容放在1行。但是一开始用的是output2中的脚本,输出总是有空格,试了很多种方法都无法去掉。一度怀疑是对于tr命令理解得不够透彻,因此加入了output1中的脚本,发现确实是能够正确实现功能的,并没有理解错误。

仔细检查对比两个脚本,最终发现问题所在:功能正确的是kkk=`echo "$k" | tr -d '\n'`,不正确的是kk=`echo $k | tr -d '\n'`。两者差了一个双引号。

以后在做脚本的时候,尤其是字符串相关操作的时候,还是要注意加上双引号,或者多关注这块吧。