我可以让它在 ksh 中工作,但不能在 bash 中工作,这真的让我发疯。希望这是我忽略的显而易见的事情。
我需要运行一个外部命令,输出的每一行都将存储在数组索引中。
这个简化的示例看起来像是在循环中正确设置了数组,但是在循环完成后,这些数组分配消失了吗?就好像循环被完全视为一个外壳?
垃圾.txt
this is a
test to see
if this works ok
testa.sh
#!/bin/bash
declare -i i=0
declare -a array
echo "Simple Test:"
array[0]="hello"
echo "array[0] = ${array[0]}"
echo -e "\nLoop through junk.txt:"
cat junk.txt | while read line
do
array[i]="$line"
echo "array[$i] = ${array[i]}"
let i++
done
echo -e "\nResults:"
echo " array[0] = ${array[0]}"
echo " Total in array = ${#array[*]}"
echo "The whole array:"
echo ${array[@]}
输出
Simple Test:
array[0] = hello
Loop through junk.txt:
array[0] = this is a
array[1] = test to see
array[2] = if this works ok
Results:
array[0] = hello
Total in array = 1
The whole array:
hello
因此,在循环中,我们分配 array[i] 并且 echo 验证它。但是在循环之后,我回到了包含“hello”的数组[0],没有其他元素。
跨 bash 3、4 和不同平台的结果相同。