关于linux:shell-echo-怪像

5次阅读

共计 630 个字符,预计需要花费 2 分钟才能阅读完成。

a.txt 的内容一共 3 行:
12345678
12345678
12345678

shell 脚本:

for line in `cat a.txt` do
    echo ${line} 'abc'
done

for cat 遍历文本,用 echo 输入每行文字.
line=12345678
输入后果:abc45678
这个景象很奇怪,咱们想要的后果是 12345678abc 才对

咱们通过调试代码 echo ${#line} 能够看到,字符串 line 的长度是 9. 咱们看到的内容长度其实是 8. 这个景象看起来很奇怪。
为了看个到底,咱们用 vim 关上文件 a.txt,输出:set invlist。该命令能够看到文本中的暗藏字符,例如 r,t 等

咱们看到,每一行结尾都有一个 $ 符号,这个就是传统的 r 回车符号,找到起因,咱们就能够入手来解决:
咱们批改代码如下

for line in `cat a.txt`
do
    echo ${line}abc |sed 's/\r//g' |sed 's/\n//g'
done

sed 命令能够把 r 替换成空,同时前面把 n 也替换一下。因为很多时候 window 编辑过的文件很就是带了 rn。
以上是解决 shell 读取 window 编辑过的 dos 格局的文件开端换行符问题,咱们 vim 关上文件,输出:set ff? 能够看到文件格式:fileformat=dos 或者 fileformat=Unix
通过:set fileformat=Unix 能够转换格局
Unix 格局的文本不存在以上问题。次要咱们有时候有 window 编辑文本的需要,又须要适应脚本读取

正文完
 0