摘自http://hi.baidu.com/ljwan12/blog/item/0e67b4affa83f3c47cd92adc.html
while read line
do
str[$i]=$line1
echo $i
echo ${str[i]}
let i=i+1
done < data
len=${#str[@]}
echo $len
$len长度为实际data文件的行数
str[]变量的作用域一直有效
do
str[$i]=$line1
echo $i
echo ${str[i]}
let i=i+1
done < data
len=${#str[@]}
echo $len
$len长度为实际data文件的行数
str[]变量的作用域一直有效
cat data | while read line
do
str[$i]=$line1
echo $i
echo ${str[i]}
let i=i+1
done
len=${#str[@]}
echo $len
$len长度为0
说明str[]变量的作用域到done结束即失效。
原因是局部变量是普通的变量,仅在创建它的Shell中有效。
cat data | while read line 使用了管道符 "|",表明父shell中的局部变量不会传递到子shell中。
本文探讨了Shell脚本中变量的作用域问题,特别是在使用while循环读取文件内容时,对比了不同场景下变量的有效范围。通过具体示例,解释了局部变量在父Shell与子Shell之间的传递限制。

3431

被折叠的 条评论
为什么被折叠?



