简单回声的模糊重定向错误


0

表演简单时,我遇到了一个奇怪的问题 echo 命令。谁能解释一下发生了什么?这是场景,文件夹中只有三个文件,我想用空白字符替换它们的内容。文件是:

ev_tracker.css  ev_tracker.html  ev_tracker.js

我尝试了一个简单的命令,将空格字符回显给所有文件

$ echo \  > *

我收到以下错误:

bash: *: ambiguous redirect

所以,我试着更具体......

$ echo \  > ev_tracker.*
bash: ev_tracker.*: ambiguous redirect

还有更具体的......

$ echo \  > ev_tracker.{css,html,js}
bash: ev_tracker.{css,html,js}: ambiguous redirect

最后,我分别对每个文件执行了操作,没​​有错误。

$ echo \  > ev_tracker.css
$ echo \  > ev_tracker.html
$ echo \  > ev_tracker.js
$

谁能解释我收到错误的原因?我正在使用Ubuntu 14.04以及任何默认值 sh 它会有的变体。


所以你回复一个反斜杠而没有转义(因此它将是空白的)文件,所以只是单独回应每个文件,而不是使用通配符,它​​应该工作。否则,您可能需要构建一个循环或数组,以便通过迭代以一种方式逐个进行。似乎无法一个一个地弄明白。
Pimp Juice IT

您的重定向输出到 一个目的地 。如果您将三个不同的文件名作为单个目标提供,那么shell将会抱怨。 (我不能和它争论,3!= 1)。
Hennes

对,@hennes,我只是感到困惑,>操作无法弄清楚通过使用通配符我想要将输出发送到所有三个文件。但是,现在我知道它希望单个目标我将来肯定会循环这样的行动,或者使用如下所述的发球台。
Madcarrots

Answers:


2
echo a > *

将通过bash扩展到

 echo a > ev_tracker.css ev_tracker.html ev_tracker.js

根据 man bash (REDIRECTION)

除非另有说明,否则以下描述中的重定向运算符后面的单词将受到(...)路径名扩展(...)

如果它扩展为多个单词,bash会报告错误。

您可以使用

echo a | tee * > /dev/null

看到 man tee,tee命令旨在满足您的需求。

还要注意

echo \ | tee * > /dev/null

输出反斜杠到文件。


谢谢,@ archemar,这似乎是最有益的答案;我不知道>只能指向一个目标。关于你的笔记,我正在给文件发送一个空白区域;我不确定发布的问题是否在原始命令中反斜杠后准确显示了两个空格字符。
Madcarrots

-2

你根本做不到这个:

$ echo ' ' > ev_tracker*

根据下面的评论,这就是我所做的。

$ touch bla blaa blaaa
$ echo ' 1' > bla*
$ cat bla
 1
$ cat blaa
 1
$ cat blaaa
 1

它也只与空间一起工作,但这很难显示出来。


我在我的机器上测试它正在运行,我正在使用arch-linux。
mstruebing
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.