「:>文件」和「>文件」?「:>文件」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