2017-05-30 5 views
2

私は< &と> &のトークンについてちょっと混乱しています。私の例の一番下に、私はちょうど< 3と> 4をcatの引数として使用できませんでしたか?私はそれを試したのであなたができないことを知っているが、私はなぜ理解していないのですか?私はファイル記述子3と4を複製していません。ファイル記述子3と4から入力と出力をリダイレクトしようとしています。なぜこれらの2つのトークンにアンパサンド記号を含める必要がありますか?"&>"と "<&"トークンの質問

#!/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

< myfilemyfile

<4という名前のファイルから読み込む同様4

ルールは単純ですという名前のファイルから読み込まれますされます:、あなたはファイル名を持っている場合は

  • ファイルオープン演算子<とを使用する必要がありますあなたはファイル記述子を持っている場合は

  • 、あなたはそれが<&は完全に独立した事業者であることに注意するのを助けることができるFDコピーオペレーター<&>&

を使用する必要があります。何にも適用されるのは<ではありません。

+0

しかし、ケース2では3つの< $1 and 4> $ 2があります。これらはファイル記述子であり、アンパサンドは含まれていません。また、なぜシンボルが大きくてあまりにも少なくなった後にスペースがあるのでしょうか? – James

+0

これらは既存のファイル記述子ではありません。彼らは、ファイル名 "$ 1"を開いた結果を保存する場所です。代わりに既存のfdをコピーしたい場合は、 '<&'を使用します。 –

関連する問題