在这种情况下,我们需要清除 bash 脚本中的数组



在下面的示例中,我们设置了数组变量 - files_in_array ,所有在/tmp 下捕获的 xml 文件捕获

注意 - 我们使用第二个"("("来创建数组

files_in_array=( $( find /tmp -type f -name '*.xml' ) )

所以现在我们可以捕获第一个/第二个值..等,如下所示

echo ${files_in_array[0]}
/tmp/demo_values.xml

echo ${files_in_array[1]}
/tmp/prod_values.xml

直到现在一切都很完美

但我不确定我们是否需要清除数组

 files_in_array=()

那么,在bash脚本中使用数组之前,我们是否必须清除数组?

与变量数组一样,数组是在 shell 进程环境中定义的,与变量不同,它们不能导出以在子进程中访问。

您给出的第一个命令

files_in_array=( $( find /tmp -type f -name '*.xml' ) )

初始化数组 如果包含files_in_array数据,则将其清除。

如注释中所述,这不是以您的方式初始化数组的安全方法,因为在进程扩展$(..)后,结果在空格制表符和换行符上拆分,并且文件名可能会拆分为优雅,一种安全的方法是使用 glob 文件扩展,因为它发生在之后并且没有拆分。所以只是

files_in_array=( /tmp/*.xml )

获取所有子路径

shopt -s globstar
shopt -s nullglob
files_in_array=( /tmp/**/*.xml )

在 bash 4.0 之前

正如评论中所述,globstar 是在 bash 4.0 中引入的,在此之前,使用 find -print0 的另一种方法可以做到这一点

files_in_array=(  )
while IFS= read -d '' -r file; do
    files_in_array+=( "$file" )
done < <( find /tmp -type f -name '*.xml' -print0 )

最新更新