簡體   English   中英

回聲沒有打印某些變量

[英]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的有用解釋 ,這導致的輸出相對於預期的是混亂

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM