bash 4.3では、手動動作と実際の動作の間に違いがあるようです。
unset string # just to be sure
declare string # $? is 0 afterwards
declare -p string # fails, 'string: not found'
printf %b "${string-unset}" "\n" # consequently, yields unset
組み込み宣言/組版マニュアルセクションには、宣言時に割り当てが必要な宣言はありません。代わりに、このdeclare [...] [...] name[=value]
記号はこれが正当でなければならないことを意味します。
私は何を見逃していますか?変数を「設定」することが何を意味するのか?少なくとも「設定解除」という用語を使用するマニュアルの「パラメータ拡張」セクションを誤って読みましたか?それとも、これは単なるバージョン固有の奇妙な点ですか?
ベストアンサー1
bash バージョン 3.2 以下の場合、順序は次のとおりです。
$ declare string; declare -p string
printdeclare -- string=""
は、変数が空の文字列に設定されていることを示します。
バージョン4.1、4.2、4.3では、この変数は何も設定されておらず、実際にエラーが発生します。
$ declare string; declare -p string
bash: declare: string: not found
Bash 4.4で修正されました。
$ declare string; declare -p string
declare -- string
これは、文字列が宣言されたが値が割り当てられていないことを意味します(nullでもない)。