ksh - 読み取りコマンドを使用して設定されていない変数を配列として読み取る

ksh - 読み取りコマンドを使用して設定されていない変数を配列として読み取る

$ an_unset_varが最初に使用される未設定の変数である次のkshスクリプトがあります。

read -A arr <<< "$an_unset_var"
echo ${#an_unset_var}
echo ${#arr[*]}

コマンドを実行すると、次の結果が表示されます。

0
1

readコマンドを使用して設定されていない変数を配列に読み込むと、配列に空の要素が入力されるのはなぜですか?この空の要素が配列の有効なセル可能な要素と見なされるのはなぜですか?

答え1

空の文字列を配列として読み込みます。配列が設定解除された後、最初の要素は空の文字列に設定されます。

空の文字列は完全に有効なデータです。何が起こると予想したのか分からない。

同等の命令セットは次のとおりです。

unset arr
arr[0]=""

arrこれで、要素が1つしかない配列です。その要素は空の文字列です。

答え2

ただのコメント: bashとkshの違い

$ ksh -c 'read -A a <<<""; typeset -p a'
typeset -a a=('')

$ bash -c 'read -a a <<<""; declare -p a'
declare -a a='()'

関連情報