是'>'有时用作“触摸”的同义词

时间:2016-03-01 19:11:49

标签: bash shell

(我不确定我是否以某种有用的方式提出这个问题,也不知道答案是否存在于某处。随意评论。最有用的我找到的参考是here。)

我遇到了一些狡猾的shell脚本,这些脚本始终使用以下构造:

> ~/foo

执行时,该行的行为与触摸相同(就我的实验能够发现而言 - 测试脚本中的多余代码用于捕获原始代码中的周围代码):

#!/bin/bash
export FOO=this.$$
> ~/${FOO}
echo 'Foo'

产生

$ ~/bin/test.sh
Foo
$ cat ~/this.15769
$ ls -l ~/this.15769
-rw-r--r-- 1 user    users 0 Mar  1 13:57 /home/user/this.15769

这是预期的行为吗?是否存在我没​​有考虑/发现的副作用?

2 个答案:

答案 0 :(得分:3)

>绝对不是touch的同义词。使用>运算符将截断现有文件; touch不会。

$ echo hi > foo.txt
$ ls -l foo.txt
-rw-r--r--  1 me  staff  3 Mar  1 14:21 foo.txt
$ touch foo.txt
$ ls -l foo.txt
-rw-r--r--  1 me  staff  3 Mar  1 14:21 foo.txt
$ > foo.txt
$ ls -l foo.txt
-rw-r--r--  1 me  staff  0 Mar  1 14:22 foo.txt

答案 1 :(得分:1)

有一点需要注意:>当目标是目录时会失败,而touch则不会。

>file

...如果文件不存在则创建一个文件,如果文件确实存在则将其截断为0字节,并更新其时间。 touch不会截断其目标内容。