シェルスクリプトでは、次の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番目の可能性はバックスラッシュで、単に次の文字を引用します。more
var
value
var
value more
'…'
"…"
一重引用符と二重引用符の違いは、一重引用符の間では各文字が自分自身を表すが、二重引用符の間では一部の文字がまだ解釈されることです。具体的には、"\\"
単一のバックスラッシュを含む文字列です。なぜなら、文字列のバックスラッシュは次の文字の引用符として解釈されるからです。二重"\""
引用符のみを含む文字列"\$var"
は、ドル記号文字列で始まる4文字の文字列です。変数の値である文字列です。代わりに、ドル記号で始まる4文字の文字列とバックスラッシュで始まる5文字の文字列です。"$var"
var
'$var'
'\$var'
ここでは、本やマニュアルを読むことなく引用について詳しく説明しない、より微妙な部分があります。バッシュマニュアル)詳細と閲覧が必要な場合引用するこのサイトにタグを付けてください。
このset
コマンドはいいえ変数に値を割り当てます。set variable value
変数に値を割り当てないでvariable
構文は次のとおりですvariable=value
。set
このコマンドの機能は、スクリプト(または関数)のパラメータを置き換えることです。パラメータを含むスクリプトを実行すると、名前の代わりに数字を含むスクリプトの特殊変数($1
、、$2
...)でパラメータを使用できます。これらの変数を位置パラメータと呼びます(スクリプト/関数の引数であるため、パラメータ、パラメータリストの位置に基づいてアクセスされるため、位置パラメータ)。数値()を使用してこれらの変数に割り当てることはできませんが、引数を使用して実行してすべての位置パラメータを設定できます。1=foo
set
たとえば、
#!/bin/sh
echo "$1"
set hello world
echo "$1"
このスクリプトには、コマンドラインに渡された最初の引数を印刷してから、組み込みの他の操作がありますhello
。set
手動詳細については。
set
基本的なシェルプログラミングの場合、今はこの使い方を忘れています。引用の基本は重要です。あなたが知る必要がある1つは、変数拡張の周りに常に二重引用符を使用することです。つまり、"$foo"
プレーンは使用しないでください$foo
。単に$foo
価値を破壊する。
この答えで私が書いたすべてのものは、Bourne / POSIXスタイルのシェル(sh
、、、dash
zshなどに関するものです。bash
)ksh
構文が異なるあまり一般的ではないシェルスイートです。 (t)cshにはset
いくつかの割り当てが含まれていますが、等号はまだ含まれています。\'"
やや似ていますが、まったく同じではありません。魚では、set variable value
変数を参照する値はvariable
やや似ていますが、まったく同じではありません。value
\'"