讀取命令序列輸出&&子shell&&父shell
將多個命令或工具結合起來一起輸出。一個命令的輸出可以當做另一個命令的輸入,而這個命令的輸出又可以作爲另一個的輸入。
這幾個命令通常用通道(pipe)來鏈接,“|”。例如:
$cmd1 | cmd2 | cmd3
三個命令組合。cmd1將輸出傳給cmd2,cmd2的輸出又傳給了cmd3。
例子:
$ ls | cat -n > out.txt
ls的輸出傳給了cat -n ,cat -n 又將輸出通過stdinc重定向寫入out.txt中。
我們可以用字shell的方式來讀取序列的輸出:
cmd_output=$(COMMANDS)
例如:
cmd_output=$(ls | cat -n)
echo $cmd_output
命令會打印ls | cat -n 的結果。
我們還可以將$()換成``(反引用號與~符號在一塊)
cmd_output=`ls | cat -n`
echo cme_output
我們在這裏要補充一個概念————子shell和父shell
簡單的理解:
我們打開一個終端,其實這就是一個父shell,當我們執行某個腳本xxx.sh時,執行xxx.sh腳本的時候其實系統就爲我們打開了一個子shell。一旦子shell執行完成後,返回父shell。子shell的執行並不會對父shell有什麼影響。
注意:
1.我們可以父shell中開啓一個子shell,方法很簡單:
pwd;
(cd /bin ;ls)
pwd;
兩次pwd返回的結果最終顯示是一樣的。
2.
我們可以使用子shell或反引用的形式將命令讀入變量中,但這裏有一個問題我們需要注意。
$cat text.txt
1
2
3 f f f
$ out=$(cat text.txt)
$echo $out
1 2 3 f f f#我們注意到系統默認將\n和空格給省略了
$echo “$out”
1
2
3 f f f
這樣我們就可以保留原格式來輸出了。