2012-04-18 522 views
21

我有一個簡單的問題,但找不到任何答案。 if條件有兩個開關用於檢查文件,-e和-f。這兩者有什麼區別?if -e和if -f之間的區別

+0

@jww這是一個關於bash腳本中的if塊的問題 - 它可能不是一種編程語言,但我肯定不會把它叫做主題。 – Ahatius 2016-06-23 13:20:12

+0

夠公平的。你有這樣的標籤;所以你把它轉向編程,而不是「如何使用這個命令」。縮回。 – jww 2016-06-23 15:57:34

回答

34

參見:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

我認爲這些都不是「如果開關」,而「測試開關」(因爲你必須使用它們的內部括號[]

但不同的是:

如果FILE存在

[ -e FILE ]真。

這將返回真正兩個/etc/hosts/dev/null

[ -f FILE ]如果FILE存在且爲常規文件,則爲真。 這將返回true for /etc/hostsfalse for /dev/null(因爲它不是常規文件)。

17
$ man bash 
     -e file 
       True if file exists. 
     -f file 
       True if file exists and is a regular file. 

一個普通文件的東西,不是目錄/符號鏈接/插座/裝置等

+0

感謝您的回答。猜測這意味着爲-f要成爲真實的,你必須參考一個文件,這不是一個鏈接或類似的東西? – Ahatius 2012-04-18 07:12:43

+0

是的。它們通常在ls -l輸出的第一個字符中有一個'-'。 – jman 2012-04-18 07:13:39

+0

好的,非常感謝! – Ahatius 2012-04-18 07:14:16

3

-e檢查任何類型的文件系統對象的; -f只有檢查常規文件。

1

if語句實際上使用程序'test'進行測試。你可以寫if語句兩種方式:

if [ -e filename ]; 

if test -e filename; 

如果你知道這一點,你可以很容易地檢查「測試」手冊頁,找出不同的測試的含義:

man test 
相關問題