変数「値」設定と変数値設定の違いは何ですか?

変数「値」設定と変数値設定の違いは何ですか?

シェルスクリプトでは、次の2つの例の違いは何ですか?

set variable1             "value"

set variable2              value

答え1

シェルスクリプトではvalue"value"とは'value'同じです。引用符を使用するかどうかを選択できます。引用符が存在する理由は、特別な意味を持つ文字列に文字を入れたいときに、引用符を使用して特殊文字が文字列の一部であることをシェルに伝えることができるからです。たとえば、

var=value more
var='value more'
var="value more"
var=value\ more

最初の行は、名前付きvalue変数に値(5文字の文字列)を割り当てますvar。は、環境変数がに設定されたプログラムをmore実行するための空白が前にあるため、このコマンドの別の単語です。他の3行はすべて同じ意味を持ちます。変数を値(6番目の文字が文字列の10文字の文字列)に設定するだけです。一重引用符は文字列を囲みます。引用の3番目の可能性はバックスラッシュで、単に次の文字を引用します。morevarvaluevarvalue more'…'"…"

一重引用符と二重引用符の違いは、一重引用符の間では各文字が自分自身を表すが、二重引用符の間では一部の文字がまだ解釈されることです。具体的には、"\\"単一のバックスラッシュを含む文字列です。なぜなら、文字列のバックスラッシュは次の文字の引用符として解釈されるからです。二重"\""引用符のみを含む文字列"\$var"は、ドル記号文字列で始まる4文字の文字列です。変数の値である文字列です。代わりに、ドル記号で始まる4文字の文字列とバックスラッシュで始まる5文字の文字列です。"$var"var'$var''\$var'

ここでは、本やマニュアルを読むことなく引用について詳しく説明しない、より微妙な部分があります。バッシュマニュアル)詳細と閲覧が必要な場合このサイトにタグを付けてください。

このsetコマンドはいいえ変数に値を割り当てます。set variable value変数に値を割り当てないでvariable構文は次のとおりですvariable=valuesetこのコマンドの機能は、スクリプト(または関数)のパラメータを置き換えることです。パラメータを含むスクリプトを実行すると、名前の代わりに数字を含むスクリプトの特殊変数($1、、$2...)でパラメータを使用できます。これらの変数を位置パラメータと呼びます(スクリプト/関数の引数であるため、パラメータ、パラメータリストの位置に基づいてアクセスされるため、位置パラメータ)。数値()を使用してこれらの変数に割り当てることはできませんが、1=foo引数を使用して実行してすべての位置パラメータを設定できます。setたとえば、

#!/bin/sh
echo "$1"
set hello world
echo "$1"

このスクリプトには、コマンドラインに渡された最初の引数を印刷してから、組み込みの他の操作がありますhelloset手動詳細については。

set基本的なシェルプログラミングの場合、今はこの使い方を忘れています。引用の基本は重要です。あなたが知る必要がある1つは、変数拡張の周りに常に二重引用符を使用することです。つまり、"$foo"プレーンは使用しないでください$foo単に$foo価値を破壊する

この答えで私が書いたすべてのものは、Bourne / POSIXスタイルのシェル(sh、、、dashzshなどに関するものです。bashksh構文が異なるあまり一般的ではないシェルスイートです。 (t)cshにはsetいくつかの割り当てが含まれていますが、等号はまだ含まれています。\'"やや似ていますが、まったく同じではありません。魚では、set variable value変数を参照する値はvariableやや似ていますが、まったく同じではありません。value\'"

関連情報