摘要:用過linux的都知道,echo和cat是我們常用的展示内容和寫入内容的方式。
本文分享自華為雲社群《echo和cat,重定向到檔案時,解決特殊字元丢失問題》,作者: 大金(内蒙的)。
概述:
用過linux的都知道,echo和cat是我們常用的展示内容和寫入内容的方式。
最近在使用這兩個最簡單的指令時,遇到了特殊字元寫入失敗問題。
這裡重新學習一下echo和cat兩個指令,記錄一下。
三種失敗場景
問題現象1:echo使用了-e但是特殊字元還是生效了
指令:
echo -e 'aa\taa' > a.txt cat a.txt
結果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5ydwIzNfVDM2ETMhV2M2QGZwIGOyEjNzEmZkFjMihTY4EmZhJDNtIjdvwFM48CXt92YucWbphmeuIzYpB3Lc9CX6MHc0RHaiojIsJye.jpg)
解釋:
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
點選關注,第一時間了解華為雲新鮮技術~