当前位置: 技术问答>linux和unix
shell脚本编程问题 求高手解答
来源: 互联网 发布时间:2016-10-22
本文导语: 代码如下: #!/bin/bash IFS.OLD=$IFS IFS=$'n' for entry in `cat /etc/passwd` do echo " Values in $entry" IFS=: for value in $entry do echo " $value" done done IFS=$IFS.OLD 问题:在刚开始时,将内部字段分隔...
代码如下:
#!/bin/bash
IFS.OLD=$IFS
IFS=$'n'
for entry in `cat /etc/passwd`
do
echo " Values in $entry"
IFS=:
for value in $entry
do
echo " $value"
done
done
IFS=$IFS.OLD
问题:在刚开始时,将内部字段分隔符设置为换行符,在第一个循环里又将IFS设置为:,为什么当外部循环执行完第一个循环后IFS的值依然是n而不是:,难道在循环内部对变量的改变只是局部的,不会影响到循环外变量的实际值?
谢谢大家
#!/bin/bash
IFS.OLD=$IFS
IFS=$'n'
for entry in `cat /etc/passwd`
do
echo " Values in $entry"
IFS=:
for value in $entry
do
echo " $value"
done
done
IFS=$IFS.OLD
问题:在刚开始时,将内部字段分隔符设置为换行符,在第一个循环里又将IFS设置为:,为什么当外部循环执行完第一个循环后IFS的值依然是n而不是:,难道在循环内部对变量的改变只是局部的,不会影响到循环外变量的实际值?
谢谢大家
|
在执行第一次循环的时候将IFS设置为“:”了,紧接着执行第二次循环时,IFS应该为“:”,可是此时
IFS又变回了“n”,我就是不明白这是怎么回事
------------------------
其实已经改变了
但是 for entry in `cat /etc/passwd`第一次执行的时候 IFS还是n 而且一次性把文件/etc/passwd的内容都已经读出来了 而你之后修改IFS不会对这个for起作用的
你不信你再加个循环 蓝色的那次循环IFS肯定是:
#!/bin/bash
IFS.OLD=$IFS
IFS=$'n'
for entry in `cat /etc/passwd`
do
echo " Values in $entry"
for value in $entry
do
echo " $value"
done
done
for entry in `cat /etc/passwd`
do
echo " Values in $entry"
IFS=:
for value in $entry
do
echo " $value"
done
done
IFS=$IFS.OLD
IFS又变回了“n”,我就是不明白这是怎么回事
------------------------
其实已经改变了
但是 for entry in `cat /etc/passwd`第一次执行的时候 IFS还是n 而且一次性把文件/etc/passwd的内容都已经读出来了 而你之后修改IFS不会对这个for起作用的
你不信你再加个循环 蓝色的那次循环IFS肯定是:
#!/bin/bash
IFS.OLD=$IFS
IFS=$'n'
for entry in `cat /etc/passwd`
do
echo " Values in $entry"
for value in $entry
do
echo " $value"
done
done
for entry in `cat /etc/passwd`
do
echo " Values in $entry"
IFS=:
for value in $entry
do
echo " $value"
done
done
IFS=$IFS.OLD
|
数据已经在缓冲区里了,修改IFS不会影响最外层的循环对缓冲区中数据的重新理解