{ command1; command2; command3; . . . }
(command1; command2; command3;. . . )
{}
包圍起來的組命名在當前 Shell 進程中執行,而由小括號()
包圍起來的組命令會建立一個子 Shell,所有命令都在子 Shell 中執行。bash ./test.sh
建立的子進程)還是有差別的,我們將在《子Shell和子進程》一節中深入講解,讀者暫時把子 Shell 和子進程等價起來就行。ls -l > out.txt #>表示覆蓋 echo "http://c.biancheng.net/shell/" >> out.txt #>>表示追加 cat readme.txt >> out.txt本段程式碼共使用了三次重定向。
{ ls -l; echo "http://c.biancheng.net/shell/"; cat readme.txt; } > out.txt
或者寫作:(ls -l; echo "http://c.biancheng.net/shell/"; cat readme.txt) > out.txt
使用組命令技術,我們節省了一些打字時間。{ ls -l; echo "http://c.biancheng.net/shell/"; cat readme.txt; } | lpr
這裡我們把三個命令的輸出結果合併在一起,並把它們用管道輸送給命令 lpr 的輸入,以便產生一個列印報告。{}
包圍的組命令在當前 Shell 進程中執行,由()
包圍的組命令會建立一個子Shell,所有命令都會在這個子 Shell 中執行。{}
比使用()
更受歡迎,並且{}
的進行速度更快,佔用的記憶體更少。