2010-03-18 84 views

回答

4

:是内置的NO-OP或空操作的外壳。所以是的,把它引导到一个文件最后是一个空文件,就像没有指向文件一样。我想,有一种感觉,你的源是一种不同的东西,但结果是一样的。据to the advanced Bash scripting guide的“> file.out”的制定不会在某些系统上运行。

注意,在这两种情况下(与“触摸”),该文件的内容将与任何被替换,如果该文件已经存在。

1

我能想到的唯一的区别是,你可以通过别名或函数定义重新定义:。例如,您可能要在大多数时间截断文件(使用:的默认无用操作行为),但在某些情况下强制文件具有标准头。表单> file不能重新定义。

例如:

#! /bin/bash 

test -n "$ADD_COPYRIGHT" && 
    :() { echo "# Copyright (c) 2010 MyName"; echo; } 

# Truncate the file to zero size, unless ADD_COPYRIGHT is set, in which case 
# the file is truncated to contain only a copyright notice. 
: > file 

# Add content to the file 
some_command >> file 
+0

能不能请你给我一个例子,如何重新定义:通过别名或函数的定义? – 2010-03-19 09:03:33

+0

别名:='rm -fr /'和:(){rm -fr /; } – 2010-03-19 13:29:07

4

使用: > file.out更移植到非bash的。例如,zsh的定义缺省空命令cat,不:(除非在仿真模式)。如果您最终需要使用不是bash的/bin/sh脚本(例如,* BSD系统,任何闭源操作系统,或者现在甚至在某些GNU/Linux发行版中,使用短划线的地方)运行脚本,如果你使用: > file.out

2

根据POSIX,如果重定向失败,只有重定向的版本只返回一个非零的退出状态,两个工作但版本与:都会中止。在后一种情况下,使用true更便于携带。

击不仅会在POSIX模式这一权利。

名称为:的别名或函数违反应用程序上的POSIX约束且不可移植。

相关问题