我在 bash 中使用数组,并且一个特定数组的行为异常。
我正在使用一个函数并调用一个外部脚本,该脚本返回一个要附加到数组的值,如下所示:
function get_unit_coverage() {
for sub_unit in "$@"
do
extracted_value=$( ./external_script.sh $file $sub_unit )
my_array+=$extracted_value
done
}
我向该函数传递一个数组,并期望每次迭代都会附加该数组。
然而,返回:
echo "${my_Array[0]}"
是
52.5500%66.6400%16.4300%47.8800%40.6600%45.6800%43.3400%74.5100%87.4600%45.6300%65.6100%58.0900%%47.5800%5.9500%7.6500%1.8000%
external_script.sh 只是回显这些值,这是一个潜在的问题吗?
答案1
要将新元素追加到数组中:
array+=( new elements here )
在你的情况下:
my_array+=( "$extracted_value" )
当你这样做时
array+=$variable
您要附加到数组的第一个元素。它是一样的
array[0]+=$variable
另请注意,在
extracted_value=$( ./external_script.sh $file $sub_unit )
值$file
和 $sub_unit
将在空格上分割并进行文件名通配。为了防止这种情况,请使用"$file"
and"$sub_unit"
代替(即用双引号引用变量扩展)。
同样,说
my_array+=( $extracted_value )
会将 的值拆分$extracted_value
为多个单词,每个单词将进行文件名通配以在数组中生成新元素。这样写会更好(正如已经提到的),
my_array+=( "$extracted_value" )
这是一般建议,没有理由这样做不是执行此操作,无论您是否知道您的值已经是不包含通配符的单个单词。
答案2
您添加到一个字符串并将其作为数组读取(正如 Kusalananda 上面解释的那样)。但你的问题显示了如何将变量视为数组。事实上,一个简单的变量可以很容易地变成一个数组。
$ a+=1
$ a+=2
$ echo "$a"
12
$ echo "${a[0]}"
12
$ a+=(3)
$ echo "$a"
12
$ echo "${a[0]}"
12
$ echo "${a[1]}"
3