题
是否有的之间的任何差别 “:>文件”和<强> “>文件”强>
?$ : > 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或空操作的外壳。所以,是的,它引导到一个文件一个空文件结束了,一样没事引导到一个文件中。有一种感觉,我想,在你的来源是一种别样的什么都没有,但结果是一样的。根据到高级Bash脚本编写指南的“> file.out
”制剂不会在某些系统上工作。
请注意,在这两种情况下(与“触摸”),该文件的内容将与任何被替换,如果该文件已经存在。
其他提示
使用: > file.out
更移植到非bash的。例如,zsh的定义缺省空命令cat
,不:
(除非在仿真模式)。如果你最终需要使脚本工作与/bin/sh
这是不是bash的(例如,* BSD系统,任何封闭源代码的操作系统,甚至在现在的一些GNU / Linux发行版,其中划线时),你”马上让你的生活更容易,如果你使用: > file.out
据POSIX,无论工作,但与:
版本如果在只用重定向的版本只返回一个非零退出状态重定向失败中止。在后一种情况下,它更便于携带使用true
。
击只做这一权利POSIX模式。
别名或命名:
功能违反上的应用程序一POSIX约束,并且不便于携带。
我能想到的唯一的区别是,你可以通过别名或函数定义重新定义:
。例如,您可能要截断的大部分时间(使用:
的默认什么也不做的行为)的文件,但文件强制有在某些情况下,一个标准的头。形式> 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
不隶属于 StackOverflow