两件事,首先这是我在这个论坛的第一个问题,如果形成各种各样,我会道歉。其次我没有编写那么多bash脚本,而且我生成的脚本之间往往需要相当长的时间。
那就是说,这是我的问题。
是否可以在bash中执行类似的操作(Clear array $ array contains):
$array=()
基本上这就是我想做的事情。我有一个带有数组变量名的变量:
array1=()
array2=()
arrayList="array1 array2"
# In a function far far away
for array in $arrayList
do
eval arr=("\"\${$array[@]\"")
for index in ${!arr[@]}
do
echo "${arr[$index]}"
done
# Here is the big "?", I like to clear the array that $array refers to.
$array=()
done
我的数组包含包含“”(空格)的字符串,这就是我使用
eval
语句的原因。不确定它是否需要,但至少它是有效的。脚本或多或少都按照我的意愿工作,但我需要清除$arrayList
中的数组,而不是在某处硬编码,即使这很容易。
答案 0 :(得分:11)
可能最简单的事情就是unset
他们。在大多数情况下,未设置的变量将与空数组完全相同,unset $array
应该可以正常工作。
答案 1 :(得分:1)
你不能$foo=bar
- 这不是bash中间接分配的工作方式。不幸的是,虽然能够进行间接数组赋值是ksh93中的一个可用功能,但它不是bash中正式记录的可用功能。
引用BashFAQ #6(如果您有兴趣了解有关一般使用间接变量的更多信息,请完整阅读):
我们不知道任何可以在POSIX或Bourne shell中复制该功能的技巧(缺少使用eval,这是非常难以安全地执行的)。 Bash几乎可以做到 - 一些间接数组技巧起作用,而另一些则没有,我们不知道所涉及的语法在将来的版本中是否会保持稳定。所以,考虑一下这个用户自担风险。
# Bash -- trick #1. Seems to work in bash 2 and up. realarray=(...) ref=realarray; index=2 tmp="$ref[$index]" echo "${!tmp}" # gives array element [2] # Bash -- trick #2. Seems to work in bash 3 and up. # Does NOT work in bash 2.05b. tmp="$ref[@]" printf "<%s> " "${!tmp}"; echo # Iterate whole array.
但是,清除更简单,因为unset $array
可以正常工作。
答案 2 :(得分:-1)
array=()
清除阵列。我猜这就是你想要的......