我正在查看由同事写的一些批处理文件,我遇到了一些奇怪的语法,他在命令开头调用了重定向操作符。
此:
> output.txt ECHO something like this
而不是:
ECHO something like this > output.txt
它把我扔了一秒钟。它有效,所以我认为它是有效的。我去找官方参考确认,但找不到。
我确实找到了this reference关于运营商本身的使用情况。
我找到了this我正在寻找的bash版本链接到这里:POSIX sh EBNF grammar
使用>的正确语法是什么?和>>批量运营商?
编辑: 为了澄清,我不是在寻找文档的例子。我想看一些文档,解释如何针对重定向操作符专门解析cmd.exe命令和.bat文件。
答案 0 :(得分:4)
命令重定向运算符的official documentation演示了它们在行尾的用法。但是将重定向放在行的开头也是正确的(尽管有管道输出)。
将重定向放在echo
行的开头的好处是可以避免将尾随空格回显到文件中。
echo Hello world! > out.txt
15个字节,包括一个尾随空格。
> out.txt echo Hello world!
14个字节,不包括尾随空格
您也可以使用括号来避开尾随空格。
(echo Hello world!) > out.txt
14个字节
括号也可用于对几个命令的输出进行分组,而无需关闭并重新打开每一行的文件句柄。
rem // option 1
> out.txt (
echo Hello world!
echo Another line
)
rem // option 2
(
echo Hello world!
echo Another line
) > out.txt
这两个括号内的代码块执行完全相同的操作。两者都比这更有效:
rem // option 3
>out.txt echo Hello world!
>>out.txt echo Another line
上面选项1和2中的括号示例只打开,写入和关闭“out.txt”一次;而选项3示例打开,写入,关闭,打开以进行追加,写入和关闭。将大量数据转储到文本文件时,这种优化可能会产生影响。