(我不确定我是否以某种有用的方式提出这个问题,也不知道答案是否存在于某处。随意评论。最有用的我找到的参考是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
这是预期的行为吗?是否存在我没有考虑/发现的副作用?
答案 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
不会截断其目标内容。