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

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

我在执行一个简单的命令时遇到了一个奇怪的现象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版本。

答案1

echo a > *

将被 bash 扩展为

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

根据man bash(重定向)

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

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

您可以使用

echo a | tee * > /dev/null

看看man tee,tee 命令就是被设计来做你要找的事情的。

还请注意

echo \ | tee * > /dev/null

将要不是向文件输出反斜杠。

答案2

你可以简单地这样做:

$ echo ' ' > ev_tracker*

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

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

它也可以只使用空格来工作,但是很难显示。

相关内容