程序替換和命令替換非常相似。命令替換是把乙個命令的輸出結果賦值給另乙個變數,例如dir_files=`ls -l`
或date_time=$(date)
;而程序替換則是把乙個命令的輸出結果傳遞給另乙個(組)命令。
寫法含義
注意點本質
<(commands)
它借助於輸入重定向,可以將它的輸出結果作為另乙個命令的輸入
commands 是一組命令列表,多個命令之間以分號;
分隔。
注意,<
或>
與圓括號之間是沒有空格的。
/dev/fd/n檔案接受(commands)的輸出,作為另乙個命令的輸入
>(commands)
它借助於輸出重定向,可以接受另乙個命令的標準輸出結果
從/dev/fd/n檔案中讀取內容,作為(commands)的輸入
舉栗結果
說明普通模式
echo "aaaaa" | read aa
echo $aa
輸出結果為空
echo 命令在父 shell 中執行,而 read 命令在子 shell 中執行,
當 read 執行結束時,子 shell 被銷毀,aa 變數也就消失了。
管道中的命令總是在子 shell 中執行的,任何給變數賦值的命令都會遭遇到這個問題。
使用程序替換
read aa< <(echo "aaaaa")
echo $aa
輸出結果為aaaaa
整體上來看,shell 把echo "aaaaa"
的輸出結果作為 read 的輸入。
<()
用來捕獲 echo 命令的輸出結果,<
用來將該結果重定向到 read。
注意,兩個<
之間是有空格的,第乙個<
表示輸入重定向,第二個<
和()
連在一起表示程序替換。
read 命令和第二個 echo 命令都在當前 shell 程序中執行,
讀取的資料也會儲存到當前程序的 aa 變數,所以使用 echo 能夠成功輸出。
程序替換用作「接受標準輸入」的例子
echo "qpy" > >(read; echo "你好,$reply")
執行結果:你好,qpy
因為使用了重定向,read 命令從echo "qpy"
的輸出結果中讀取資料。
為了能夠在不同程序之間傳遞資料,實際上程序替換會跟系統中的檔案關聯起來,這個檔案的名字為/dev/fd/n
(n 是乙個整數)。該檔案會作為引數傳遞給()
中的命令,()
中的命令對該檔案是讀取還是寫入取決於程序替換格式是<
還是>
:
使用 echo 命令可以檢視程序替換對應的檔名:
命令輸出
說明echo >(true)
/dev/fd/63
/dev/fd/
目錄下有很多序號檔案,程序替換一般用的是 63 號檔案,該檔案是系統內部檔案,我們一般檢視不到。
/dev/fd/63
檔案起到了資料中轉或者資料橋梁的作用,借助重定向,它將>()
內部的命令和外部的命令聯絡起來,
使得資料能夠在這些命令之間流通。
echo <(true)
/dev/fd/63
echo >(true) <(true)
/dev/fd/63 /dev/fd/62
echo "qpy" > >(read; echo "hello, $reply")
hello, qpy
第乙個>
表示輸出重定向,它把第乙個 echo 命令的輸出結果重定向到/dev/fd/63
檔案中。
>()
中的read命令從/dev/fd/63中讀取內容
,然後用echo 命令輸出 read 讀取到的內容。
linux整理 23Shell操作日期時間
shell操作日期時間 date print or set the system date and time linux系統為我們提供了乙個命令date,專門用來顯示或者設定系統日期時間的。語法格式為 date option format 或者 date u utc universal mmddhh...
shell替換功能
據了解,替換功能有sed,sub,gsub,gensub四種,下面分別講解其應用方式。資料來源如下 snk17173 3 東方玄幻 傳奇 2 網遊 4 意境 snk17173 3 東方玄幻 傳奇 2 網遊 4 意境 snk17173 3 東方玄幻 傳奇 2 網遊 snk17173 3 東方玄幻 傳奇...
程序程式替換
替換原理 用fork建立子程序後執行的是和父程序相同的程式,但有可能在執行不同的 分支,但是在實際情況中,我們通常希望子程序和父程序執行不同的程式,來提高效率,所以才有程式替換 子程序往往要呼叫一種exec函式用來執行另乙個程式,將 和資料替換為可執行檔案的 和資料,環境變數並不改變。當程序的使用者...