"&安培;>"和"<&"令牌问题

时间:2017-05-30 22:42:01

标签: linux bash redirect io

我对<&和&&令牌和我在我的问题中包含了一个例子。在我的例子的底部,我不能使用< 3和> 4作为cat的参数吗?我知道你不能因为我已经尝试过但我不明白为什么不呢?我没有复制文件描述符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 个答案:

答案 0 :(得分:1)

< myfile将从名为myfile

的文件中读取

<4同样会从名为4

的文件中读取

规则很简单:

  • 如果您有文件名,则应使用文件打开操作符<>

  • 如果您有文件描述符,则应使用FD复制操作符<&>&

可能有助于注意<&是一个完全独立的运算符。它不适用<