変数を初期化するさまざまな方法

私が見た限りでは、プロセスの出力で変数を初期化する2つの方法があります。これらの2つの間に違いはありますか?

ex1=`echo 'hello world'`
ex2=$(echo 'hello world')
8

3 答え

同じ効果が得られます。

より読みやすく、 $()を別の $()にネストするのが簡単なので、 $()をお勧めします。

更新:

$()構文は、POSIX 1003.1標準(2004年版)です。しかし、一部の古いUNIXシステム(SunOS、HP-UXなど)では、/bin/sh がそれを理解していません。

そのような環境でスクリプトを動作させる必要がある場合は、代わりにバッククォート「 `」を使用するか、別のシェル(通常はksh)を使用する必要があります。

使用する構文がわからない場合は、 $()を使用します。バックティック構文は推奨されていません。

9
追加された
@samus:$()は実際にはPOSIX(1003.2)ですが、古いUNIXでは動作しません。私を信頼してください - 私は毎日使っています。
追加された 著者 Michał Šrajer,
@サミュ: "よりポータブルな"とは、 "新しいPOSIX標準と互換性があります"ではなく、 "より多くのOSで動作"を意味します。
追加された 著者 Michał Šrajer,
それがポイントです。移植性について言えば、POSIXは、ほとんどのプラットフォームでサポートされている現在の標準であるため、特別な要件がある場合は特にそうです。
追加された 著者 Samus_,

see http://mywiki.wooledge.org/BashFAQ/082

また、 $()はPOSIXなので、shで動作することに注意してください。

4
追加された

あなた自身で初期化していない場合、変数をデフォルトの変数に初期化する別の方法があります。

[jaypal:~/Temp] a="I have initialized var a"
[jaypal:~/Temp] echo ${a:="Default value"}
I have initialized var a
[jaypal:~/Temp] a=
[jaypal:~/Temp] echo ${a:="Default value"}
Default value
3
追加された
したがって、演算子は変数の新しい値を読み取り、古い値を出力します。 :)
追加された 著者 Paul Manta,
$ 1 $ 2 としてスクリプトに値を渡し、明示的に値が渡されていなくてもスクリプトを実行するのに役立ちます。これにより、値が割り当てられていない場合、デフォルト値で実行するように暗黙的に変数を設定できます。これは、変数が割り当てられているかどうかをチェックする約4-5行のコードを節約します。例えば、[-z "$ var"]の場合はのようになります。 ...
追加された 著者 jaypal singh,
echo $ {a:= "Default value"}またはecho $ {a: - "Default value"}のいずれかを使用することができます
追加された 著者 Indrajeet,