2010-03-18 97 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約束且不可移植。

相關問題