read 命令會讀取行并將數(shù)據(jù)分割為哥哥字段,供賦值給指明的 shell 變量。搭配 -r 選項,可控制數(shù)據(jù)要如何被讀取。
I/O 重定向允許你改編程序的來與與目的地,或者將多個程序一起執(zhí)行與 subShell 或代碼塊里。除了重定向到文件和從文件從定向之外,管道還可以用于將多個程序連接在一起。嵌入文件則提供了行內輸入。
文件描述符的處理是基本操作,特別是文件描述符 1 與 2,會重復的用在日常的腳本編寫中。
printf 是一個深具靈活性,但有點復雜的命令,用途是產生輸出。大部分的時候,他可以簡單的方式使用,但是他的力量很大。
shell 會執(zhí)行許多的展開 (或替換) 在每個命令行的文字上:波浪號展開式 (如果有支持) 與通配符,變量展開,算術展開以及命令替換。通配符現(xiàn)已包含 POSIX 字符集,用來針對文件名內的字符進行獨立于 locale 的匹配。為了使用上方便,點號文件并未包含在通配符展開中。命令替換有兩種形式:...(反引號) 為原始形式,而 $(...) 為較新,較好寫的形式。
引用會保護不同的源代碼原件,免于被 shell 做特殊處理。單個的字符可能會以前置反斜杠的方式引用使用。單引號會保護所有括起來的字符;引號括起來的所有文字都不做處理,切尼不可以將單引號內嵌到以單引號引用的文字內。雙引號則是組合括起來的項目,從而視為單一的單詞或參數(shù),但是變量,算術與命令替換仍舊應用到內容中。
eval 命令的存在是為了取代一般命令行替換與執(zhí)行書訊,讓 shell 腳本可以動態(tài)的構建命令。這個功能很好用,但是請小心使用,花點時間了解 shell 在執(zhí)行輸入行時的順序絕對是有好處的。
subSHell 與代碼塊是組化命令的兩種選擇。它們的用一個不相同,可以根據(jù)需求選用。內建命令的存在是因為它們要改變 shell 內部狀態(tài)且必須是內建的 (例如 cd),有些則是為了效率,則可以編寫一個能使內建命令生效的 shell 函數(shù)。在所有內建命令里,set 命令是最復雜的。