2016-05-17 49 views
0

は、私は、コードの作業exprコマンドが見つかりません?なぜexprは見つからないのですか?

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

次の作品を作ろうと、いくつかの時間を費やしているが、これは動作しません「式expr:コマンドが見つかりません」という。私はStackOverflowで掘り下げた唯一の事はパスの問題(I.E.私の環境変数を設定します)ですが、それが問題なら、どうしてエコー、let、宣言のような他の関数がうまく動作するのでしょうか?

これ以上の文脈では、これはウィンドウのcygwinのインストールに近いです。私の質問はなぜ私はexprを見つけることができないのですか?

+0

ショーをexpr'た '何? – GMichael

+3

bash(およびPOSIX)シェルでは、 'MY = $((2 + 2))'構文も使用できます。 –

+0

現在、何も表示されていません。私が望むのは、コードがクラッシュせずに実行できることだけです。 – Cameron

答えて

5

あなたはPATHに1つのディレクトリしか持たないように変更しました(したがって、exprを見つけることができません)。代わりに、あなたはbashのの組み込み算術評価を使用することができ、計算のための外部プロセスexprを呼び出すのも

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

を:あなたは、このような既存のPATH値を置き換えるPATHに新しいパスを追加してはいけません

$ echo $((2+2)) 
4 

編集:

はい、それらはではありません。実行可能ファイルはにリストされているディレクトリから見つかります。

代わりに(echo,typeなど)のシェルは、シェル組み込み機能と呼ばれるシェル自体によって提供される機能です。

アウトタイプ type echo

type exprは、それが(別名/シェル組み込み/実行ファイルなど)コマンドのどのタイプである知っている

シェル我々はmanページを使用してヘルプは通常help shellBuiltinによって知ることができる組み込みコマンド実行可能ファイル用。

PS

type自体は、パス変数 PATHは、ご使用の環境に同梱の標準的なバイナリの場所を見つけるために使用される組み込みのシェル( type typeを参照)

+0

これはとても可能です。 – Cameron

+0

確かにこれはうまくいきました。私がまだ理解していないことは、なぜ 'expr?'なのでしょうか?エコーしないでください。 – Cameron

2

です。実際、システム環境変数は通常大文字で表されます(例えばHOME)。あなたのコマンドで

:(?または意図的に)

PATH="C:\Ben\MyPictures" 

あなたは偶然持っているので、ここでそのコマンド・インタプリタ、bashは、もはやexprを見つけることができませんC:\Ben\MyPicturesによって標準バイナリへの標準パスを置き換えます。あなたは大文字の変数を使用する場合は、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. 
関連する問題