2012-01-07 165 views
4

我一直在尋找一種方法來檢查,如果是使用shell腳本,當我遇到this answer含有該代碼來安裝的程序:Shell腳本「|| {}」讀另類

hash foo 2>&- || { echo >&2 "I require foo but it's not installed. Aborting."; exit 1; } 

但是,代碼ISN非常(人類)可讀,那種語法的替代方法是什麼?

+0

你能更清楚一點你想要檢查什麼/如何?你想查看一個二進制文件/名稱是否在你的$ PATH中?您是否想要查看系統中是否安裝了特定的rpm/dpkg?請多解釋一下。 – 2012-01-07 04:00:24

+0

我想檢查'$ PATH'上的二進制文件/名稱。 – 2012-01-07 04:07:39

+1

明白了。然後下面提到的'hash'就是另外一種選擇,'which'是另一個。 :)我同意其他人的觀點,代碼非常好,只需要理解它,並在這裏和那裏添加幾條新行就可以更好地理解它。取決於你想要做什麼,你可以剝離它很多。 – 2012-01-07 04:17:13

回答

9

可讀性很主觀。我特別認爲,原件非常易讀,一旦您知道||意味着短路。所以你讀了原來的「如果這樣做,這如果這一個失敗」。

等效代碼,而無需使用||是:

if ! hash foo 2>&- 
then 
    echo >&2 "I require foo but it's not installed. Aborting." 
    exit 1 
fi 
2

這是完全可讀的人習慣於shell腳本,因爲它是一個成語。可讀性的唯一障礙是缺少換行符:

hash foo 2>&- || { 
    echo >&2 "I require foo but it's not installed. Aborting." 
    exit 1 
} 
+1

在這裏兩年了,仍然沒有使用任何大小寫?! :( – 2012-02-01 11:31:10

+1

我已經這麼長時間了 – 2012-02-04 20:45:02

+1

很抱歉聽到這個,也許你可以在這裏用一些大小寫來使用大寫字母 – 2012-02-05 01:58:17