「a = b」と「a = $ b」の間に違いはありますか?

「a = b」と「a = $ b」の間に違いはありますか?

私の教科書で2つのUnixスクリプトを見つけました。 1つa=$b(max = $ a形式)ともう1つa=b(number = num形式)で実装します。

これらは同じものですか、それとも違いがありますか?

答え1

$ a=b
$ printf $a
b
$ b=hello
$ a=$b  
$ printf $b
hello

デフォルトでは、値がリテラルのa=b変数を作成します。名前付き変数が名前付き既存の変数と同じ値を持つようにします。aba=$bab

答え2

この場合、a=$b変数の値bをに割り当てますa。リテラル文字列 ""の値をa=b割り当てる場合ab

たとえば、と同じ値をb=10割り当てるとします。次のいずれかを実行できます。ab

a=$b

または、

a=10

答え3

bashヘルプリクエストを使用してこれらの質問に答えることもできますset -x。このフラグは bash に、コマンドを実行する前にコマンドと拡張引数を表示するように指示します。

まず、いくつかの設定は次のとおりです。

$ a=some-value
$ b=some-other-value
$ set -x

次に、シェルがこれらのコマンドをどのように解釈するかを見てみましょう。

$ a=b
+ a=b

変数の値はaリテラル文字列「b」に設定されます。

今試してみましょう$b

$ a=$b
+ a=some-other-value

ここで私たちはシェルに言います。評価する $bbコマンドに値を挿入します。

これはシェルのいくつかの値を示しています。個々のコマンドが操作を実行するのではなく、変数とワイルドカードを解釈します。たとえば、シェルは始める前に作業を実行するため、ls「* .txt」を解釈する方法を知る必要はありません。ls

$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt  b.txt  c.txt

関連情報