“:>文件”和“文件”之间有什么区别吗?
$ : > 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
:
是 shell 内置的 NO-OP 或 null 操作。所以是的,将它定向到一个文件最终会得到一个空文件,就像没有定向到文件一样。我想,有一种感觉,你的来源是一种不同的虚无,但结果是一样的。根据高级 Bash 脚本指南,“ > file.out
”公式在某些系统上不起作用。
请注意,在这两种情况下(与“触摸”不同),如果文件已经存在,文件内容将被替换为空。
使用: > file.out
对非 bash 来说更便携。例如, zsh 将默认的空命令定义为cat
, not :
(除非在仿真模式下)。如果您最终需要使脚本与/bin/sh
非 bash 一起工作(例如,*BSD 系统、任何闭源操作系统,甚至现在在使用 dash 的某些 GNU/Linux 发行版上),您将如果您使用,让您的生活更轻松: > file.out
根据 POSIX,两者都可以工作,但:
如果重定向失败,则版本会中止,而仅重定向的版本只会返回非零退出状态。在后一种情况下,它更便于使用true
。
Bash 仅在 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