![](/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.