在任何Unix shell上,表单<input.txt cat
和cat <input.txt
似乎都完全相同。它们之间有什么区别吗?
答案 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可能表现不同。