输出重定向和空格


9

我对此感到偏执,但希望这是一个简单的问题:

之间有什么区别

cat file1 | egrep -oP "[Mm]y string" > /home/user/file.txt

cat file1|egrep -oP "[Mm]y string">/home/user/file.txt

即,是否有空格填充竖线(|)和重定向(>)字符有关系吗?我真的很偏执,如果我不想要空格,空格会以某种方式最终出现在输出文件中。谁能澄清?(如果重要,请使用Ubuntu 12 / bash。)


唯一的区别是a)装饰性和b)在bash中编辑命令行时的便利性-例如,“单词”由空格分隔,因此,如果没有空格|>键入Ctrl-W删除前一个“单词”的空格,则删除的内容可能超出您的预期。同上,用于光标移动键击等Esc-fEsc-b
CAS

Answers:


8

在shell命令行中,未引用的空格仅用于在命令解析期间定界单词。它们不会传递,无论是在命令看到的参数还是在标准输入流中都不会传递它们。


您确定在操作员后面使用空格没有安全漏洞吗?我现在很难复制它,但是有一个普遍的利用方式,即当目标文件为“ fileName”时,恶意用户可以通过使用“ fileName”这样的文件来更改目标操作。
CrippledTable
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.