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 只是回应这些值,这是一个潜在的问题吗?
将新元素追加到数组:
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)
这是一般建议,无论您是否知道您的值已经是不包含通配符的单个单词,都没有理由不这样做。