【Shell】bash的<<, <<<, < <()用法


這幾個都是在bash腳本中經常用到的:
第一種:

cmd <<EOF
..
EOF

含義是here-document,表示傳給給cmd的stdin的內容從這里開始是一個文檔,內容碰到EOF為截止

$ cat <<EOF
This is a document
EOF

把EOF之間的內容,作為一個文檔傳遞給cmd作為其stdin的內容。

第二種:

cmd <<< "string"

含義是here-string,表示傳給給cmd的stdin的內容從這里開始是一個字符串。

$ cat <<<"aaa"

把字符串"aaa"傳遞給cmd作為其stdin的內容

第三種:

cmd1 < <(cmd2)

標准名稱叫:Process substitution
這個語法看起來很怪異,其實他就是兩個語法。

<(cmd2): 把cmd2的輸出寫入一個臨時文件
cmd1 < : 這是一個標准的stdin重定向。

把兩個合起來,就是把cmd2的輸出(stdout)傳遞給cmd1作為輸入(stdin);中間通過臨時文件做傳遞。
舉一個例子:

$ cat < <(echo "12345")
12345

分開看:

$ echo <(echo "12345")
/dev/fd/63

可見<(echo "12345")的輸出就是文件/dev/fd/63,文件內容是字符串“12345“;/dev/fd/63是一個匿名pipe文件(為什么是63,估計是當時分的吧?我猜的);其實我們可以假設整個命令是這樣的:

$ cat < /dev/fd/63

整個命令串的含義就是把字符串"12345"寫到臨時文件/dev/fd/63,然后讓cat從臨時文件/dev/fd/63讀取內容。

應用場景:
檢查密鑰對是否有效
How to check if an RSA public / private key pair match
I have two files, id_rsa and id_rsa.pub. What command can be used to validate if they are a valid pair?

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )

參考文章How to check if an RSA public / private key pair match


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM