23 shell 程序替換

2022-06-11 02:09:09 字數 2198 閱讀 4518

程序替換和命令替換非常相似。命令替換是把乙個命令的輸出結果賦值給另乙個變數,例如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函式用來執行另乙個程式,將 和資料替換為可執行檔案的 和資料,環境變數並不改變。當程序的使用者...