常用的echo和cat,這次讓我折在了特殊字元丟失問題上
阿新 • • 發佈:2021-12-31
摘要:用過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