2016-05-17 63 views
0

我已經花了幾個小時試圖讓下面的一段代碼工作未找到expr命令?爲什麼沒有找到expr,但其他的都是?

PATH="C:\Ben\MyPictures" 
    echo $PATH 
    MY=`expr 2 + 2` 

,但這不起作用,因爲「EXPR:找不到命令」。我在StackOverflow上找到的唯一東西是路徑問題(I.E.設置我的環境變量),但如果這是問題,爲什麼其他函數像echo,let和declare已經正常工作?

欲瞭解更多的內容,這是對窗口的cygwin近乎全新的安裝。我的問題是爲什麼我找不到expr?

+0

是什麼'這expr'說明了什麼? – GMichael

+3

使用bash(和POSIX)shell,還可以使用'MY = $((2 + 2))'語法。 –

+0

它目前不顯示任何內容。我只想讓代碼在不崩潰的情況下運行。 – Cameron

回答

5

您已修改您的PATH只有1個目錄(因此它不能找到expr)。您必須在新的路徑追加到PATH而不是取代現有的PATH值,如:

export PATH="$PATH:C:\Ben\MyPictures" 

而且不是調用外部程序expr進行計算,你可以使用bash的內置算術評價:

$ echo $((2+2)) 
4 

編輯:

是的那些將工作,因爲它們是而不是從中列出的目錄中找到可執行文件。

取而代之的是它們(echo,type等)是由bash殼本身提供的功能,它本身被稱爲殼內置插件。

類型進行type echotype expr知道什麼類型的命令是(別名/ shell內建/可執行文件等)

shell內置的幫助可以通過help shellBuiltin通常被發現在那裏爲我們所用man頁用於可執行文件。

PS:type本身內置殼(見type type

+0

這很合理。在早上,如果是這樣,獎勵最好的答案 – Cameron

+0

果然,這個工作。我不明白的一件事仍然是爲什麼'expr?'爲什麼不'回聲'即使讓聲明仍然工作,而改變路徑變量。 – Cameron

2

PATH變量PATH被用於查找與您的環境標配的二進制文件的位置。事實上系統環境變量通常是大寫的(例如HOME)。

在您的命令:

PATH="C:\Ben\MyPictures" 

你不小心被C:\Ben\MyPictures代替標準路徑標準二進制,因此命令解釋,這裏的bash,再也找不到expr(或故意?)。當您使用大寫變量PATH說,你可以這樣做:

if [ -z "$PATH" ] #check if a variable is empty 
then 
PATH="C:\Ben\MyPictures" 
else 
PATH="$PATH:C:\Ben\MyPictures" 
fi 

確實是更好的選擇是使用小寫字母爲用戶定義的變量:

path="C:\Ben\MyPictures" 
#in this case you should not get an error for expr but 
# I am not sure how a Linux-Like environment handle character case. 
# check that out.