创建/删除临时文件(数组中的名称)

创建/删除临时文件(数组中的名称)

您好,我想创建临时文件然后删除它们。我有数组中的变量名称。创建工作正常,但删除它们时遇到问题。谢谢

FILES=( a b c d e f g h)

for i in "${FILES[@]}"; do
    eval "$i"=`mktemp`
done

答案1

如果您的 bash shell 足够新(版本 4+),那么我建议使用关联数组来存储文件名:

declare -A filenames
for i in "${FILES[@]}"; do
  filenames[$i]=$(mktemp)
done

完成后很容易删除它们:

rm -- "${filenames[@]}"

答案2

你想要:

file_variables=(a b c d e f g h)
files=()
for var in "${file_variables[@]}"; do
  file=$(mktemp) || exit
  eval "$var=\$file"
  files+=("$file") # or files=("${files[@]}" "$file") with older versions
done

something with "$a"
something with "$g"...

rm -f -- "${files[@]}"

注意引用。例如,您不应传递$(mktemp)to的扩展eval,而应传递文字$(mktemp)字符串。在 中bash,您还需要引用大多数扩展。

我们唯一注意到引用的是a=$file上面b=$file运行的eval, ,因为 split+glob 在分配给标量变量时不会(不能)发生。像我们的files+=("$file").

答案3

我认为最好的选择是创建一个 TEMP 目录,然后在 TEMP 目录中创建临时文件。这样你就可以删除临时目录中的所有文件,而不必担心使用类似的东西

rm ./TEMP/*

答案4

您可以使用 nameref (Bash 4+)

declare -a names=( a b c d e )

for n in "${names[@]}"; do
  declare -n ref="$n"
  ref="$( mktemp )"
done

for n in "${names[@]}"; do
  declare -n ref="$n"
  test -f "$ref" && rm "$ref"
done

declare -nnameref 是使用(or local -n, or )声明的变量typeset -n。另一个变量的名称在将其声明为 nameref 时分配给它。此后,使用 nameref 变量的值与创建 nameref 时使用 nameref 变量的值相同。

相关内容