3

试图从文件或标准输入中读取,我希望做这样的事情:

if [ "$1" == "-" ]
  then 
    INPUTFILE="&0"
fi

但如果我这样做

while read ROW
  do
    # ... something
done <$INPUTFILE

我有

&0: No such file or directory

从命令行

cat <&0

完美运行,有没有办法将标准输入引用存储在变量中?
PS:我知道可以通过简单的方式实现相同的结果...

4

3 回答 3

4

有些场合cat有它的用途,这可能是其中之一:

# Use cat so it works if $1 is just -
cat $1 |
while read ROW
do
    ...whatever
done

记录你为什么这样使用cat;否则,它看起来像 UUOC(无用的 Cat)。

于 2013-10-14T14:03:22.450 回答
2

它不起作用,因为 shell 解释&0为文件名。

而不是说:

INPUTFILE="&0"

说:

INPUTFILE="/proc/$$/fd/0"

这将使它从STDIN当前 shell 进程中读取。

于 2013-10-14T13:35:38.557 回答
0

&0不是文件名,但它是使用文件描述符进行 I/O 重定向的符号的一部分:您应该<&0整体阅读。

您可以在本文档中找到更多详细信息。

于 2013-10-14T13:11:55.807 回答