“:>文件”和“>文件”?“:>文件”VS“>文件”
$ : > file.out
$ ls -l file.out
-rw-rw---- 1 user user 0 Mar 18 21:08 file.out
$ > file.out
$ ls -l file.out
-rw-rw---- 1 user user 0 Mar 18 21:08 file.out
“:>文件”和“>文件”?“:>文件”VS“>文件”
$ : > file.out
$ ls -l file.out
-rw-rw---- 1 user user 0 Mar 18 21:08 file.out
$ > file.out
$ ls -l file.out
-rw-rw---- 1 user user 0 Mar 18 21:08 file.out
:
是内置的NO-OP或空操作的外壳。所以是的,把它引导到一个文件最后是一个空文件,就像没有指向文件一样。我想,有一种感觉,你的源是一种不同的东西,但结果是一样的。据to the advanced Bash scripting guide的“> file.out
”的制定不会在某些系统上运行。
注意,在这两种情况下(与“触摸”),该文件的内容将与任何被替换,如果该文件已经存在。
我能想到的唯一的区别是,你可以通过别名或函数定义重新定义:
。例如,您可能要在大多数时间截断文件(使用:
的默认无用操作行为),但在某些情况下强制文件具有标准头。表单> 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
使用: > file.out
更移植到非bash的。例如,zsh的定义缺省空命令cat
,不:
(除非在仿真模式)。如果您最终需要使用不是bash的/bin/sh
脚本(例如,* BSD系统,任何闭源操作系统,或者现在甚至在某些GNU/Linux发行版中,使用短划线的地方)运行脚本,如果你使用: > file.out
根据POSIX,如果重定向失败,只有重定向的版本只返回一个非零的退出状态,两个工作但版本与:
都会中止。在后一种情况下,使用true
更便于携带。
击不仅会在POSIX模式这一权利。
名称为:
的别名或函数违反应用程序上的POSIX约束且不可移植。
能不能请你给我一个例子,如何重新定义:通过别名或函数的定义? – 2010-03-19 09:03:33
别名:='rm -fr /'和:(){rm -fr /; } – 2010-03-19 13:29:07