本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之讀書筆記之二。
echo
echo是非常常用的shell命令。參數如下:
- -e:開啟反斜線字元backslash-escaped的解析,即對/n,/t等字元進行解析,而不視之為兩個字元
- -E:關閉反斜線字元的解析,/n作為兩個字元,這是系統預設模式
- -n:刪除最後的換行
backslash-escaped有下面參數,注意需要加上選擇-e方可生效。
/a
: 發出警告鈴音(ALERT or CTRL-G (bell))
/b
: 退格(BACKSPACE or CTRL-H )
/c
: 刪除最後的字元及最後的換行(Omit final NEWLINE )
/e
: 刪除後面的一個字元(Escape character (same as /E) )
/E
: 同上(Escape character)
/f
: 換頁符,在某些現實中會清屏,有些會換行(FORMFEED or CTRL-L )
/n
: 換行(NEWLINE (not at end of command) or CTRL-J )
/r
: 從行頭開始,和換行不一樣,仍在本行(RETURN (ENTER) or CTRL-M )
/t
: tab鍵(TAB or CTRL-I )
/v
: 豎直tab,和/f一樣,顯示不同機器有所不一樣,通常會引起換行VERTICAL TAB or CTRL-K
/n
: 在cygwin中使用/65,無法正確顯示'A’但是下面兩種方法否可以顯示。ASCII character with octal (base-8) value n, where n is 1 to 3 digits
/0nnn
: 用8進位的值表示一個字元,例如/0101,即65,表示字元’A’(The eight-bit character whose value is the octal (base-8) value nnn where nnn is 1 to 3 digits )
/xHH
: 用16進位的值表示一個字元,例如/x41,即65,表示字元’A’The eight-bit character whose value is the hexadecimal (base-16) value HH (one or two digits)
//
: 表示‘/’Single backslash
倒數第2-4,用數值來表示字元和裝置相關,通常用於複雜的IO操作,例如游標控制和特殊的圖形符號。
printf
Linux提供一個功能更強大,更靈活的列印命令printf。printf和C語言的使用方式類似。和echo不一樣,它不會在最後自動加上換行,需要寫入命令中。例如printf "Hello, world/n"。printf的命令格式如下:
printf format-string [arguments]
例子為:printf "%s, %s/n" hello world。如果格式需要的參數比後面給出的多,超出的部分為0或者null。格式如下。
%c:ASCII字元,如果參數給出字串,則列印第一個字元
%d:10進位整數
%i:同%d
%e:浮點格式([-]d.精度[+-]dd)
%E:浮點格式([-]d.精度E[+-]dd)
%f:浮點格式([-]ddd.precision)
%g:%e或者%f的轉換,如果後尾為0,則刪除它們
%G:%E或者%f的轉換,如果後尾為0,則刪除它們
%o:8進位
%s:字串
%u:非零正整數
%x:十六進位
%X:非零正數,16進位,使用A-F表示10-15
%%:表示字元"%"
如果需要限定輸出的寬度,格式為%flags width.precision format-specifier,width是整數,右邊對齊,如果需要左邊對齊,在前面加“-”,例如"%-20s"表示從左邊開始對齊,寬度為20,如果字串長度少於20,通過空格補齊。precision在浮點值中提供四捨五入。例如%5.6G,長度為5,精度為6。精度是可選的。長度和精度的值可以參數中指定,例如printf "%*.*G/n" 5 6 $myvalue。長度指顯示中占的字元長度,與字元長度的同義。如果長度比實際的少,例如實際字元長度更大或者所要求的精度更大,則顯示按實際長度。
%d, %I, %o, %u, %x, %X:在裡面使用精度,表示最小顯示的數字。如果顯示的數字比需求少,則補充0。預設值為1.
%e, %E:在裡面使用精度,表示最小顯示的數字。如果顯示的數字比需求少,在小數點後面補充0。預設值為10.精度度為0經隱藏小數點。
%f:在這裡的精度,表示小數點後面的數位數目。
%g, %G:這裡的精度,表示最大的有效數位數目。
%s:這裡的精度,表示最大的字元數目。
在前面,介紹了”-“作為靠左對齊,下面介紹這些特殊符號
-:靠左對齊
space:正數前面加空格,負數前面加符號,例如12.12,|% f|,顯示| 12.120000|,注意前面留了一個空格。例如-12.12,|% f|,顯示|-12.120000|
+:對於數位給予加號或減號。
#:給出另一種格式:
- %o以8進位顯示整數,而%#o則在前面加上零,表明是八進位,例如12,顯示014
- %x或者%X以16進位的方式顯示整數,而%#x或者%#X,在16進位的整數前面加上0x或者0X來表示,例如12,顯示0XC
- %#e,%#E, %#f,將只以十進位顯示
- %#g,%#G,將不刪除最後無關的補齊0,例如12.1200,將全部顯示,而不是12.12。
0:對於數目,不使用空格,而使用0來作為補齊。
介紹兩個特別的字元顯示格式%b和%q。
%b:表示解析字串的特殊的字元,包括/n等等。例如printf "%s/n" 'hello/nworld',顯示hello/nworld,要將/n作為分行符號,則需要用printf "%b/n" 'hello/nworld'
。
%q:printf "%q/n" "greetings to the world"顯示為greetings/ to/ the/ world,可以作為shell的輸入。
相關連結: 我的Linux操作相關文章