2013-04-16 20 views
8

(編集:@Michaelのフィードバックに基づいて、質問より正確な)に設定されていない場合、デフォルト値を取得する:それ以外の場合は、$VARNAMEが設定されていない場合は、次のコマンドをプリント「default value」bashで変数がメイク

、私はしばしばparameter expansionを使用VARNAMEの内容を出力します。

echo ${VARNAME:-default value} #if VARNAME empty => print "default value" 
echo ${VARNAME-default value} #if VARNAME empty => print "" (VARNAME string) 

I did not find GNU make上で同様の機能

。 は、私はようやく私の Makefileに書いた:

VARNAME ?= "default value" 
all: 
     echo ${VARNAME} 

しかし、私は、このソリューションで満足していない:それは常に変数VARNAMEを作成し、これにはいくつかのmakefileの動作を変更することがあります。

未設定変数のデフォルト値を取得する簡単な方法はありますか?

答えて

10

変数を設定し、それが空でないし、それが空の場合、デフォルト値である場合、変数作るGNUの拡張を使用しますが、しないようにしたい場合は、このような何か行うことができます。

all: 
     echo $(or $(VARNAME),default value) 
+0

Nice答え... – devnull

+0

bashの '$ {VARNAME-default}'( '' ')のmake版は、 $(フィルタ未定義、$(起源VARNAME)、デフォルト、$ {VARNAME}) '(もし私が間違って入力した場合には、 – bobbogo

1

あなたは変数が空でない値を持っているかどうかをテストしたい場合は、あなたが使用することができます。

ifeq ($(VARNAME),) 
     VARNAME="default value" 
else 
     do_something_else 
endif 

変数が定義されていないか、されているかどうかをチェックするために、ifdefを使用しています。

マニュアルのSyntax of Conditionalsを参照してください。

+0

ありがとう、これは可能な解決策ですが、 'VARNAME?="デフォルト値 "(注:変数' VARNAME'を作成/変更したくありません)と同じくらい単純ではありません。 Cheers – olibre

+0

上記のスニペットは 'VARNAME'を作成/変更しません。 'VARNAME'が存在するか否かにかかわらず、' VARNAME'が空であるかどうかを単にチェックします。どちらの場合でも、 'VARNAME'は作成されません。後で 'ifdef($(VARNAME))'を使って検証することができます! – devnull

+0

おっと、そうです、謝罪します。私は@ MadScientistの答えのように、もっと便利なものを探していました。私は、上記の5行のスニペット(私の視点)よりも 'VARNAME?="デフォルト値 "(変数を作成したとしても)を使用する方が好きです。あなたの解決策が正しいので、私はあなたに+1を与える。私はあなたが@ MadScientistの答えが良いと思う、彼にも+1を与えてください;-)助けてくれてありがとう。乾杯。 – olibre

0

コロンを削除するだけです。置換に:-を使用すると、変数がnull、空の文字列、または存在しない場合はデフォルト値が使用されますが、-を単独で使用すると、変数が定義されていない場合はデフォルト値に置き換えられます。

# var1=default 
# var2= 

# echo var2 is ${var2:-$var1} 
var2 is something 
# echo var3 is ${var3:-$var1} 
var3 is something 

# echo var2 is ${var2-$var1} 
var2 is 
# echo var3 is ${var3-$var1} 
var3 is something 
+1

':-'と' -'を区別してくれてありがとうございます。私は私の質問をより正確に編集します。しかし、あなたの答えはシェルのためであり、makefileのためには機能しません。 – olibre