1. 程式人生 > 其它 >常用的echo和cat,這次讓我折在了特殊字元丟失問題上

常用的echo和cat,這次讓我折在了特殊字元丟失問題上

摘要:用過linux的都知道,echo和cat是我們常用的展示內容和寫入內容的方式。

本文分享自華為雲社群《echo和cat,重定向到檔案時,解決特殊字元丟失問題》,作者: 大金(內蒙的)。

概述:

用過linux的都知道,echo和cat是我們常用的展示內容和寫入內容的方式。

最近在使用這兩個最簡單的命令時,遇到了特殊字元寫入失敗問題。

這裡重新學習一下echo和cat兩個命令,記錄一下。

三種失敗場景

問題現象1:echo使用了-e但是特殊字元還是生效了

命令:

echo -e 'aa\taa' > a.txt cat a.txt

結果:

解釋:

echo會將輸入的字串送往標準輸出。輸出的字串間以空白字元隔開, 並在最後加上換行號。

可用引數說明:

-n 不要在最後自動換行
-e 若字串出現以下字元,仍以特殊字元處理。

特殊字元如下:

   \a 發出警告聲;
   \b 刪除前一個字元;
   \c 最後不加上換行符號;
   \f 換行但游標仍舊停留在原來的位置;
   \n 換行且游標移至行首;
   \r 游標移至行首,但不換行;
   \t 插入tab;
   \v 與\f相同;
   \\ 插入\字元;
   \nnn 插入nnn(八進位制)所代表的ASCII字元;

問題現象2:cat內容中帶有$符號,字元丟失

命令:

cat << EOF > a.txt
eth=pwd
PATH=${eth}
EOF

結果:

cat a.txt

解釋:

cat內容中帶有$變數的時候會將 $和變數名 變成空格,可以新增轉義字元\搞定。
也可以是將前面的EOF,增加‘’或者“”或者\,都可以解決,即是’EDF’,“EOF”,\EOF。

問題現象3:<<- 重定向時,製表符消失

命令:

注意這裡是<<- EOF

cat <<- EOF > a.txt
	eth=pwd
	PATH=/\${eth}
EOF

結果:

cat a.txt

解釋:

Here Document 是在Linux Shell 中的一種特殊的重定向方式。

基本形式:

cmd << delimiter
  Here Document Content
delimiter

作用:

將兩個 delimiter 之間的內容(Here Document Content 部分) 傳遞給cmd 作為輸入引數;

注意事項如下:

  • @1、EOF 只是一個標識而已,可以替換成任意的合法字元
  • @2、作為結尾的EOF前後不能有任何字元
  • @3、作為起始的EOF前後的空格會被省略掉
  • @4、重定向增加引數"-"的時候。會清除中間內容的製表符

總結

往檔案裡面寫內容的最好方式是啥呢?

  • 使用Here Document寫法
  • 轉義EOF這個特殊字元

追加內容的場景:

cat << \EOF >> 檔名
檔案內容
EOF

覆蓋內容的場景:

cat << \EOF >檔名
檔案內容
EOF

點選關注,第一時間瞭解華為雲新鮮技術~