我有以下 ksh 脚本,其中 $an_unset_var 是第一次使用的未设置变量:
read -A arr <<< "$an_unset_var"
echo ${#an_unset_var}
echo ${#arr[*]}
执行该命令,我得到以下输出:
0
1
为什么使用 read 命令将未设置的变量读入数组会在数组中输入空元素?为什么这个空元素会被视为数组的有效可数元素?
答案1
您将一个空字符串读入数组。该数组被取消设置,然后它的第一个元素被设置为空字符串。
空字符串是完全有效的数据。我不确定你期望发生什么。
等效的命令集是
unset arr
arr[0]=""
arr
现在是一个只有一个元素的数组。它的元素是空字符串。
答案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='()'