空の文字列と「」は同じ文字列ですか?

空の文字列と「」は同じ文字列ですか?

Bashのマニュアルは次のように言います:

パラメータに値が割り当てられている場合は、パラメータが設定されます。空の文字列は有効な値です。

...

値を指定しないと、変数に空の文字列が割り当てられます。

空の文字列はと同じですか""

全長がゼロですか?どちらも条件式でテストする-zか、-n文字列の長さがゼロかゼロでないかをテストできますか?

ベストアンサー1

はい、その文脈では、空の文字列は、バイトがまったく含まれていない長さがゼロの文字列です。存在するbash

var=
var=''
var=""
var=$''
var=$""
var=$(true) # or any command that outputs nothing or only newline
            # characters
var=`true`
var=${null_or_unset_var}
var=''""$''$""$(true)"`true`"

ただし、副作用として変数はbashNULバイトをサポートしません(内部的にはNULで区切られたC文字列を使用するため)。bashzsh

var=$'\0'
var=$'\u0000'
var=$'\c@'
var=$'\x00'
var=$'\0\0\0\0\0'

これらすべての場合に$var設定されますが、何も含まれません(空の文字列)。echo "${#var}"出力0して[ -z "$var" ]trueを返し、printf %s "$var"何も出力しません。

後でunset var(しかし、bash変数を宣言する他の関数から呼び出された関数でこれを行う場合は、設定をオフにするのではなく、外部スコープのバージョンを表示することがありmkshますのでyash注意してください。unset$var地元の)、$varnullかどうかに関係なく値はありません。

ただし、$varこのオプションを設定しないと、それでもnull(空の文字列)に展開されます。nounset設定されていない変数とnull値が割り当てられた変数との間には異なる違いがあります。

  • ${var?}$var設定されていない場合のトリガエラー
  • ${var+x}値があるx場合(Nullも含む)に拡張されます。$var
  • ${var-x}x$var設定されていない場合は、次に展開されます。
  • [[ -v var ]]$var設定されていない場合は false を返します。
  • 変数が表示されている場合は、設定された後に各コマンドの環境に渡され、それ以外の場合はまったく渡されませんexportvar=

おすすめ記事