我可以得到這個在ksh中工作,但不是在bash中,這真的讓我瘋了。 希望這是明顯的,我俯瞰。bash麻煩分配給一個循環中的數組索引
我需要運行一個外部命令,其中每行的輸出將存儲在數組索引處。
這個簡化的例子看起來好像是在循環中正確地設置數組,但是在循環完成後,這些數組賦值都沒有了?就好像這個循環被完全視爲一個外殼一樣?
junk.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
因此,儘管在循環中,我們分配陣列[i]和所述回聲進行驗證。 但循環後,我回到陣列[0]包含「你好」沒有其他元素。
bash 3,4和不同平臺上的結果相同。
「我需要運行一個外部命令,其中輸出的每一行都將存儲在數組索引處。」 「貓」是一個簡單的例子。我需要運行一個命令,並將其輸出到循環中,並像
user1596414
2012-08-13 21:07:10
更新了幾個選項。最後一個(如果你的bash版本足夠新)可能是你想要的。 – chepner 2012-08-13 21:21:23
+1臨時文件或bash 4.2(或更高版本)選項可以工作。有第三個選項使用IFS來處理空白,如果不需要遍歷輸出,也可以與簡單的數組賦值相結合。 – user1596414 2012-08-13 22:11:44