Bash

使用輸入重定向進行程序替換

  • September 2, 2014

我試圖結合程序替換來理解輸入重定向。我正在使用bash3

一個例子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從文件描述符讀取的命令。

引用自:https://unix.stackexchange.com/questions/153297