這幾個都是在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" )

