一般文字編輯器會隱藏控制字元(Tab、換行、Ctrl 字元等),導致除錯困難。cat 指令配合參數可將不可見字元視覺化,快速定位格式問題。本文說明 -A、-T、-E 參數差異與實際輸出對照。

printf 'testing\012\011\011testing\014\010\012more testing\012\011\000\013\000even more testing\012\011\011\011\012' > /tmp/testing.txt
包含:換行(\n/\012)、Tab(\t/\011)、換頁(\f/\014)、退格(\b/\010)、空字元(\0/\000)、CR(\r/\013)。
| 工具 | 顯示結果 |
|---|---|
cat (無參數) | 僅顯示可列印字元,控制字元解析為實際動作(換行、Tab 跳格) |
nano / vim | 以符號顯示:^I(Tab)、^L(換頁)、^H(退格)、^@(空字元)、^K(VT)、^M(CR) |
-T:顯示 Tab 為 ^I
$ cat -T /tmp/testing.txt
testing
^I^Itesting
more testing
^I
even more testing
^I^I^I
-E:顯示行尾結束符 $
$ cat -E /tmp/testing.txt
testing$
testing$
$
more testing$
even more testing$
$
-A:顯示**所有**不可見字元(等同 -vET)
$ cat -A /tmp/testing.txt
testing$
^I^Itesting^L^H$
more testing$
^I^@^K^@even more testing$
^I^I^I$
| 符號 | 代表字元 | ASCII 碼 | 鍵盤輸入 |
|---|---|---|---|
^I | Tab (HT) | 0x09 / 011 | Tab / Ctrl+I |
^M | CR (Carriage Return) | 0x0D / 013 | Ctrl+M |
^J | LF (Line Feed) | 0x0A / 012 | Ctrl+J |
^L | FF (Form Feed) | 0x0C / 014 | Ctrl+L |
^H | BS (Backspace) | 0x08 / 010 | Ctrl+H |
^@ | NUL (Null) | 0x00 / 000 | Ctrl+@ / Ctrl+Space |
^K | VT (Vertical Tab) | 0x0B / 013 | Ctrl+K |
$ | 行尾 (僅 -E/-A 顯示) | - | - |
# 檢查 Windows (CRLF) vs Unix (LF) 換行格式
cat -A file.txt | head -20
# 找出檔案中的 Tab 混用空格縮排
cat -T file.py | grep -n '^I'
# 管線傳給 less 翻頁檢視
cat -A large_file.log | less
善用 cat -A 快速診斷換行格式混雜、縮排不一、殘留控制字元等隱性問題,是 Shell 腳本除錯的利器。