
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`"
ただし、副作用として変数はbash
NULバイトをサポートしません(内部的にはNULで区切られたC文字列を使用するため)。bash
zsh
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
地元の)、$var
nullかどうかに関係なく値はありません。
ただし、$var
このオプションを設定しないと、それでもnull(空の文字列)に展開されます。nounset
設定されていない変数とnull値が割り当てられた変数との間には異なる違いがあります。
${var?}
$var
設定されていない場合のトリガエラー${var+x}
値があるx
場合(Nullも含む)に拡張されます。$var
${var-x}
x
$var
設定されていない場合は、次に展開されます。[[ -v var ]]
$var
設定されていない場合は false を返します。- 変数が表示されている場合は、設定された後に各コマンドの環境に渡され、それ以外の場合はまったく渡されません
export
。var=
答え2
はい。テストの使用この回答:
$ [ -n "${a+1}" ] && echo "defined" || echo "not defined"
not defined
$ a=""
$ [ -n "${a+1}" ] && echo "defined" || echo "not defined"
defined
$ b=
$ [ -n "${b+1}" ] && echo "defined" || echo "not defined"
defined
したがって、変数を設定する""
ことは、変数をnull値に設定するのと同じです。したがって、NULL値と""
同じです。