![](/img/trans.png)
[英]linux echo/print removing 1 space in string when printing multiple variables
[英]Echo is not printing certain variables
我的代码有一些问题,即使变量中包含字符串,也无法打印某些变量。
$ dmisysname=$(sed -ne 148p ./3A47083/S09850724414683/002590F3851A.txt | awk -F '=' '{ print $2 }' | sed 's/ //')
$ dmibrdname=$(sed -ne 157p ./3A47083/S09850724414683/002590F3851A.txt | awk -F '=' '{ print $2 }' | sed 's/ //')
$ echo $dmisysname $dmibrdname
这应该给我$ dmisysname和$ dmibrdname内的任何内容,但是输出显示如下:
X9DRi-LN4 + / X9DR3-LN4 +
为了确保2个变量中都有一个字符串,我分别回显了每个变量。
$ echo $dmisysname
PIO-647R-6RLN4F + -ST031
$ echo $dmibrdname
X9DRi-LN4 + / X9DR3-LN4 +
我是在做一些必须使用打印缓冲区的错误操作吗?还是我没有看到更大的问题?
您的输入文件是在Windows下创建的,因此使用CRLF行终止。 根据@Lurker的有用解释 ,这导致linux下bash的输出相对于预期的是混乱的 。
使用dos2unix
实用工具修复文件:
$ dmisysname=$(sed -ne 148p ./3A47083/S09850724414683/002590F3851A.txt | awk -F '=' '{ print $2 }' | sed 's/ //')
$ dmibrdname=$(sed -ne 157p ./3A47083/S09850724414683/002590F3851A.txt | awk -F '=' '{ print $2 }' | sed 's/ //')
$ echo $dmisysname $dmibrdname
X9DRi-LN4+/X9DR3-LN4+
$ dos2unix 3A47083/S09850724414683/002590F3851A.txtdos2unix: converting file 3A47083/S09850724414683/002590F3851A.txt to Unix format ...
$ dmisysname=$(sed -ne 148p ./3A47083/S09850724414683/002590F3851A.txt | awk -F '=' '{ print $2 }' | sed 's/ //')
$ dmibrdname=$(sed -ne 157p ./3A47083/S09850724414683/002590F3851A.txt | awk -F '=' '{ print $2 }' | sed 's/ //')
$ echo $dmisysname $dmibrdname
PIO-647R-6RLN4F+-ST031 X9DRi-LN4+/X9DR3-LN4+
$
我在Linux下重新创建了文件的可行版本,然后使用unix2dos
按照Windows unix2dos
进行了格式化。 然后,我可以重新创建您的问题。 使用dos2unix
将其还原可修复该问题。
您的每个变量都以回车符( \\r
)结尾。 因此,发生的事情是两者都得到了回应,但是第二个覆盖了第一个。
我将使用-e选项进行说明:
$ echo -e "FOO\rBAR\r"
BAR
但是两者都得到了回应。 只是BAR
正在覆盖FOO
:
$ echo -e "FOO\rBAR\r" | od -c
0000000 F O O \r B A R \r \n
0000011
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.