2011-08-06 5 views
3

ここに故障表示私のスクリプトの簡易版です:私は変数をエコーするとバッシュ:シンプルな変数の代入の「コマンドが見つかりません」

#!/bin/bash 
${something:="false"} 
${something_else:="blahblah"} 
${name:="file.ext"} 

echo ${something} 
echo ${something_else} 
echo ${name} 

、私は私が入れた値を取得するには、だけでなく、それエラーが発生します。私は間違って何をしていますか?

出力:次の3つがstdoutに出力されている間

./test.sh: line 3: blahblah: command not found 
./test.sh: line 4: file.ext: command not found 
false 
blahblah 
file.ext 

最初の2行は、stderrに放出されます。

私のプラットフォームは、fedora 15、bashバージョン4.2.10です。

答えて

3

変数を1行に置くと、変数に格納されているコマンドが実行されます。割り当てが同時に実行されていることは付随的なことです。

要するに、しないでください。

echo ${something:="false"} 
echo ${something_else:="blahblah"} 
echo ${name:="file.ext"} 
+0

フン、私は実現しなかった理由を、私は知りませんそれは...私の問題を解決すると思う。ありがとう! – tjameson

+0

@IgorVizma:ええと...私はそこに例を挙げました... –

0

あなたはそれ以外の場合は、指定したデフォルトを使用して設定されている場合$(variable_name:=value} bashが変数名を代入し使用している場合それは単に

variable_name=value 

です。 「:」で

: ${something:="false"} 
: ${something_else:="blahblah"} 
: ${name:="file.ext"} 

トリック:あなたはコロンを追加することができます

+0

それがポイントでした。質問でそれを指定しないのは残念です。 – tjameson

5

(ノーオペレーションコマンドは)何もexecutatedない取得し、ということですが、パラメータが展開されます。個人的に私はこの構文を気に入らない。なぜなら、このトリックを知らない人にとっては、コードを理解するのが難しいからである。

あなたが代替としてこれを使用することができます。

something=${something:-"default value"} 

以上、よりポータブル(しかし、私見より読み):

[ "$something" ] || something="default value" 
+0

ええ、私は素早く 'man:'をした:と思う:私は好きなことをするだろう。私はこれを徹底的にコメントしています。より良い選択肢はありますか? – tjameson

+0

":"は組み込みです。あなたは "助けてください:"または "人がbash"する必要があります。 「SHELL BUILTIN COMMANDS」を参照してください。 –

関連する問題