有什么区别"

时间:2014-07-31 20:40:35

标签: shell io-redirection

在任何Unix shell上,表单<input.txt catcat <input.txt似乎都完全相同。它们之间有什么区别吗?

2 个答案:

答案 0 :(得分:2)

不,他们之间没有区别。请参阅the POSIX shell command language specification,它不区分简单命令之前或之后的重定向。 (对于复合命令,规范只要求shell支持最后的重定向。)

中的任意点中的重定向简单命令不是POSIX sh规范要求支持的;但是,在bash这样允许它们的shell中,这些在语法上也是等价的。

答案 1 :(得分:0)

somecommand是一个简单的命令,没有区别。

如果它是循环,则在命令前面带有重定向的表单是语法错误:

例如,这个:

while read line ; do echo "$line" ; done < /etc/motd

将打印/etc/motd的内容(方便了解您的系统是否托管得如此糟糕以至于您无法执行cat命令),但是这样:

< /etc/motd while read line ; do echo "line" ; done

给出语法错误:

bash: syntax error near unexpected token `do'

这是为了bash;其他shell可能表现不同。