我在尝试设置和填充数组时遇到问题,该数组的名称应该是另一个变量的值...任何人都可以帮忙吗?
mainTID=${pidArray[$pidCounter]}
tempThreadIDs=`ps -eL | grep ${mainTID} | awk '{ if ( $2 != '$mainTID' ) print $2}'`
$mainTID=( $tempThreadIDs )
mainTID是一个整数,我想调用数组,无论该整数是什么,然后使用名为'tempThreadIDs'的列表填充它
我考虑过使用eval,但我确实需要保持开销,我无法让它正常工作......然后我试图先声明数组,但是我得到一个错误,说明了value(整数)是'不是有效的标识符'...我不允许将数组称为数字吗?
提前致谢!
答案 0 :(得分:1)
BashFAQ
的{{3}}页面的{p> This section可能在这里有用(尽管你真的应该阅读整页)。
If you need to assign multiline values, keep reading.
A similar trick works for Bash array variables too:
# Bash/ksh93/mksh/zsh
typeset readFix=${BASH_VERSION+a}
aref=realarray
IFS=' ' read -d '' -r${readFix:-A} "$aref" <<<'words go into array elements'
echo "${realarray[1]}" # prints "go"
答案 1 :(得分:1)
不幸的是,Bash不支持多维数组,因此您最好将它们存储为字符串,但可以轻松解析:
储存:
mainTID=${pidArray[$pidCounter]}
readarray -t VALUES < <(exec ps -eL | awk -v tid="$mainTID" '$1 == tid && $2 != tid { print $2 }')
IFS='|' eval 'STORAGE[$mainTID]="${VALUES[*]}"'
使用:
mainTID=${pidArray[$pidCounter]}
IFS='|' read -ra VALUES <<< "${STORAGE[$mainTID]}"
for V in "${VALUES[@]}"; do
# Do something with $V.
done
注意:STORAGE是一个数组变量。数字已经足够了。但是,如果您要使用除数字之外的键,则在使用之前将其声明为关联数组参数:
declare -A STORAGE
当然,您可以拥有自己的首选参数名称和案例格式。
正如您可能已经注意到的那样,我尝试简化或更正您的Awk命令。我希望我做得对。
另一个注意事项:使用带有前缀+ pid命名变量的间接参数扩展配对是另一个好主意,但对环境来说是一种笨重的污染,并且每次需要扩展时都必须继续使用引用来自变量的值。