Edu*_*eff 5 arrays indexing bash
首先很抱歉,因为我的英语可能不好。我想使用变量来索引数组中的元素或使用相同的变量来索引所有元素。例如:
...
var1="1"
var2="*"
array=(one two three for five)
for elem in ${array[$var1]}
do
echo $elem
done
Run Code Online (Sandbox Code Playgroud)
当我使用var1在${array[$var1]} 中建立索引时它可以正常工作,但是如果我使用var2不能正常工作,我会收到此错误:
./ed.sh line XXX *: syntax error: operand expected (error token is "*")
Run Code Online (Sandbox Code Playgroud)
我很确定该错误与 * 通配符扩展有关,但我没有找到可以帮助我解决此问题的答案。那么,我该怎么做呢?
*并且@不被视为数组中的常规元素。它们在迭代键时不会被列出,并且在通过索引变量间接扩展时不会被考虑。
bash源代码有一个函数chk_atstar可以检查是否[@]或[*]正在使用,你可以看到它是按字面完成的,而不是通过任何扩展:
else if (valid_array_reference (name, 0))
{
temp1 = mbschr (name, '[');
if (temp1 && temp1[1] == '@' && temp1[2] == ']')
{
Run Code Online (Sandbox Code Playgroud)
如果你真的想这样做,你可以通过变量间接:
arr=(one two three)
index='*'
var="arr[$index]"
echo "${!var}"
Run Code Online (Sandbox Code Playgroud)
尽管您最好不要尝试将这些特殊的数组访问模式视为数组元素。