我在执行一个简单的命令时遇到了一个奇怪的现象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
它也可以只使用空格来工作,但是很难显示。