Bash
使用輸入重定向進行程序替換
我試圖結合程序替換來理解輸入重定向。我正在使用
bash
3一個例子
tr
如下$ tr "o" "a" <(echo "Foo") tr: extra operand `/dev/fd/63' Try `tr --help' for more information.
我想我明白為什麼這不起作用。程序替換
<( )
創建一個文件描述符,其中tr
僅從標準輸入讀取。我怎樣才能使它與正確的重定向一起工作?
我知道我可以簡單地使用管道:
$ echo "Foo" | tr "o" "a" Faa
但是,我正在努力獲得更好的理解。
man bash
我在,的幫助下嘗試了一些事情<&
,但我真的不知道我在做什麼。如何正確使用程序替換
tr
?
你真的很親密:
tr "o" "a" < <(echo "Foo")
替換
<()
會生成一個文件描述符,並且只是將路徑粘貼到 shell 中。為了理解,只需執行:<(echo blubb)
你會看到錯誤:
-bash: /dev/fd/63: Permission denied
這就是為什麼它只是粘貼
/dev/fd/63
到外殼中而/dev/fd/63
不是可執行的,因為它是一個簡單的管道。在上面的tr
-example 中,它echo "Foo"
是寫入管道並通過輸入重定向<
它是tr
從文件描述符讀取的命令。