天天看點

常用的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和cat,這次讓我折在了特殊字元丢失問題上

解釋:

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      
常用的echo和cat,這次讓我折在了特殊字元丢失問題上

cat内容中帶有$變量的時候會将 $和變量名 變成空格,可以添加轉義字元\搞定。

也可以是将前面的EOF,增加‘’或者“”或者\,都可以解決,即是’EDF’,“EOF”,\EOF。

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

注意這裡是 <<- EOF

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

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

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      

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

繼續閱讀