In bash, wenn ich auf ein Array nach Index zugreifen, bekomme ich seltsames Verhalten, wenn das Array eine Variable ist, die in der Quelle eines anderen Bash-Skript importiert wurde . Was verursacht dieses Verhalten? Wie kann es behoben werden, so dass sich ein Array, das von einem anderen Bash-Skript stammt, genauso verhält wie ein Array, das im laufenden Skript definiert ist?Zugriff auf Array nach Index in bash funktioniert nicht korrekt, wenn Array aus einer Quelle stammt
Quelle des Tests:
$ {Zahlen [0]} evals auf „eins zwei drei“ und nicht „eines“, wie es in vollen Test should.The Ich habe versucht, dieses Verhalten zu zeigen, ist unten dargestellt. sh:
#!/bin/bash
function test {
echo "Length of array:"
echo ${#numbers[@]}
echo "Directly accessing array by index:"
echo ${numbers[0]}
echo ${numbers[1]}
echo ${numbers[2]}
echo "Accessing array by for in loop:"
for number in ${numbers[@]}
do
echo $number
done
echo "Accessing array by for loop with counter:"
for ((i = 0 ; i < ${#numbers[@]} ; i=$i+1));
do
echo $i
echo ${numbers[${i}]}
done
}
numbers=(one two three)
echo "Start test with array from within file:"
test
source numbers.sh
numbers=${sourced_numbers[@]}
echo -e "\nStart test with array from source file:"
test
Quelle von number.sh:
#!/bin/bash
#Numbers
sourced_numbers=(one two three)
Ausgabe von test.sh:
Start test with array from within file:
Length of array:
3
Directly accessing array by index:
one
two
three
Accessing array by for in loop:
one
two
three
Accessing array by for loop with counter:
0
one
1
two
2
three
Start test with array from source file:
Length of array:
3
Directly accessing array by index:
one two three
two
three
Accessing array by for in loop:
one
two
three
two
three
Accessing array by for loop with counter:
0
one two three
1
two
2
three
vielleicht Shell-Debugging mit 'set-vx' wird Ihnen etwas zeigen. (Habe jetzt keine Zeit zum Experimentieren). Viel Glück. – shellter