Bash 没有将数组附加到新索引。只是扩展第一个索引

cc6*_*g11 1 bash array bash-functions

我在 bash 中使用数组,一个特定的数组表现异常。

我正在使用一个函数并调用一个外部脚本,该脚本返回一个要附加到数组的值,如下所示:

function get_unit_coverage() {

 for sub_unit in "$@"
 do
     extracted_value=$( ./external_script.sh $file $sub_unit )
     my_array+=$extracted_value
 done
}
Run Code Online (Sandbox Code Playgroud)

我将此函数传递给一个数组,并希望每次迭代都附加该数组。

然而,返回:

echo "${my_Array[0]}"
Run Code Online (Sandbox Code Playgroud)

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%
Run Code Online (Sandbox Code Playgroud)

external_script.sh 只是回应这些值,这是一个潜在的问题吗?

Kus*_*nda 7

将新元素追加到数组:

array+=( new elements here )
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

my_array+=( "$extracted_value" )
Run Code Online (Sandbox Code Playgroud)

当你做

array+=$variable
Run Code Online (Sandbox Code Playgroud)

您要附加到数组的第一个元素。它与

array[0]+=$variable
Run Code Online (Sandbox Code Playgroud)

另请注意,在

extracted_value=$( ./external_script.sh $file $sub_unit )
Run Code Online (Sandbox Code Playgroud)

$file$sub_unit将在空格分开,并进行文件匹配。为了防止这种情况,使用"$file"and"$sub_unit"代替(即双引号变量扩展)。

同样,说

my_array+=( $extracted_value )
Run Code Online (Sandbox Code Playgroud)

会将 的值拆分$extracted_value为多个单词,每个单词都将进行文件名通配以在数组中生成新元素。那样写会更好(如前所述),

my_array+=( "$extracted_value" )
Run Code Online (Sandbox Code Playgroud)

这是一般建议,无论您是否知道您的值已经是不包含通配符的单个单词,都没有理由这样做。