2012-04-30 6 views

答えて

7

$var${var}の間に違いはありませんし、"$var""${var}"の間に違いはそれがある場合にパーサがするときは、ユーザーの元のバージョンをお使いの意図を識別することができない場合があり除き、ありません。考えてみましょう:変数fooworldが定義されていないため

foo=hello 
echo "$fooworld" 
echo "${foo}world" 

最初echoは、何も出力しません。 2番目のコマンドは、foo変数を参照していることをシェルが判断できたので、helloworldを出力します。

$var"$var"の違いは、引用符で囲まれていない変数の展開が展開後にシェルによって評価されることです。 /

var='ls /' 
$var 

リスト、ls /という名前のコマンドは、ユーザーの環境では利用できないので、拡張後にシェルがls /: No such file or directory

var='ls /' 
"$var" 

結果に対し、トークン区切り文字としてスペースを評価するため、次のような。

+0

ありがとうございます。 – E1Suave

2

ものがに展開されています単一のパラメータであり、別々の単語に分割されません。

${var}の表記は、次の文字が変数名の一部である可能性がある場合に便利です(例:"${var}name")。

function args() { 
    while [ $# -gt 0 ]; do echo "arg: '$1'"; shift; done 
} 

# var=" a b c" 

# args $var 
arg: 'a' 
arg: 'b' 
arg: 'c' 

# args "$var" 
arg: ' a b c' 
+0

** $ {var} **表記はいつでも使用できますか?変数がコマンドであるかどうかによって、これが問題を引き起こすかどうかを判断できますか。 ** var = $(echo hi)**または変数が単純な文字列だった場合Eg ** var = "hi" **? – E1Suave

+0

"変数はコマンドでした" - 変数がコマンドの*出力*を含むように設定されていることを意味しますか?いいえ、違いはありません。それは単なる変数です –

+0

読みやすさを損なうと思わない限り、常に '$ {var}'形式を使用するのが適切です。 – Sorpigal

関連する問題