Linux Shell Echo多變量輸出時怪異疊寫現象(某些字符串變量中含有\r或\n)

今天利用Linux Shell命令從文件中截取一部分文本行信息 `Cat file | grep someKeyword` 到Shell變量中,然後又用shell字符串變量截取的方法,提取文本行內更準確的字符信息;利用同樣的操作方法,得到多個字符串變量信息,最後再用echo組合多變量輸出所需要的格式信息,但最終控制檯顯示結果卻發現了怪異現象,一些字符沒有出現或者從首字符處出現了疊寫、相互覆蓋、覆寫的現象!

例如:用Echo命令多變量組合輸出 echo "$var1 $ var2 $ var3",卻意外地只看到var3完整內容和var2部分內容,且var3重疊到首字母進行覆蓋輸出。

調整var1、var2、var3變量的順序後,會得到一些不同,但是由於調整順序並不滿足最終要求(只能是var1..N的順序組合;var1和var2都含有同樣的特殊字符),在最開始費了好一陣子時間,一直參不透到底是因爲什麼。

過程中甚至還懷疑到echo -e模式身上上來,初步懷疑到是因爲某些特殊字符的原因。不過,這是驢頭不對馬嘴,完全相反。過程中又猜測用echo -n是不是會效果好點,結果依然出現同樣的輸出重疊的現象。

 深入研究下去,用Shell字符串長度函數獲得var1、var2、var3字符串長度,發現var1、var2的字符串長度與實際看到的字符有差異,且差了一個字符!

當時就懷疑到是不是var1、var2中含有\r或\n的隱藏字符,後來用tr -d '\r'和tr -d '\n'去掉字符串中的特殊\r、\n字符,發現輸出就正常了。

由此,總結:在echo整體輸出或不換行輸出時,如果輸出變量字符串中含有\r或\n的特殊字符,則有可能導致在其後續輸出變量內容會從首字符重新開始重疊輸出,就導致顯示結果上的怪模怪樣了。

初步解釋,echo在這個場景下的行爲也是很符合設計的。原則上在echo不換行輸出模式下,輸出字符串中要求換行,則echo控制流只能讓輸出流重新回到了當前行的首字符,相當於一次軟回車,這樣就出現了覆寫、覆蓋了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章