2017-05-30 88 views
2

我對< &和> &令牌有點困惑,我已經在我的問題中包含了一個示例。在我的例子的底部,我不能只使用< 3和> 4作爲貓的參數嗎?我知道你不能,因爲我已經嘗試過,但我不明白爲什麼不呢?我沒有複製文件描述符3和4,我只是試圖重定向輸入和輸出從文件描述符3和4.爲什麼我必須在這兩個令牌中包含&符號?「&>」和「<&」令牌問題

#!/bin/bash 

case $# in 

    0) 
     exec 3<&0 4<&1 
     ;; 

    1) 
     exec 3< $1 4<&1 
     ;; 

    2) 
     exec 3< $1 4> $2 
     ;; 

    *) 
     echo "bad" 
     return 1 
     ;; 

esac 

cat <&3 >&4 

exec 3<&- 4<&- 

回答

1

< myfile將從一個名爲myfile

<4同樣會從一個叫4

文件中讀取文件中讀取的規則是直截了當:

  • 如果你有文件名,你應該使用文件打開操作符<>

  • 如果您有文件描述符,你應該使用FD複製經營<&>&

它可以幫助需要注意的是<&是一個完全獨立運營。這不是<適用於任何東西。

+0

但是,如果我們有3 < $1 and 4> $ 2,這些是文件描述符,我們沒有包括&符號。另外,爲什麼在大於和小於符號後有空格? – James

+0

它們不是現有的文件描述符。它們就是您存儲打開文件名「$ 1」的結果的位置。如果您想要複製現有的fd,則可以使用'<&'。 –