shell中的特殊变量IFS


shell中特殊变量IFS的使用

IFS是 内部字段分隔符(internal field separator)。默认情况下,bash shell会将空格、制表符、换行符 当做字段分隔符。
IFS=$'\n':;" 就是 将换行符、冒号、分号、双引号作为字段分隔符
IFS='\n' //将字符\和字符n作为IFS的换行符。
IFS=$'\n' //真正的使用换行符做为字段分隔符。
IFS='\n':;" //将反斜杠、n、冒号、分号和双引号作为字段分隔符。

shell 将字符串分割为数组

1.使用内置的分割符IFS
str="192.168.31.65"
OLD_IFS="$IFS" #保存旧的分隔符
IFS="."
array=($str)
IFS="$OLD_IFS" # 将IFS恢复成原来的
for i in "${!array[@]}"; do
  echo "$i=>${array[i]}"
done
2.使用字符串替换然后构造数组
str="192.168.31.65"
array=(${str//\./ })
for i in "${!array[@]}"; do
    echo "$i=>${array[i]}"
done

shell 遍历行的输出结果

对于命令行输出的结果,如果要遍历,一般都是用for循环遍历,具体语法为:
for line in `ls`;do
    #do something
done

对于ls这类语句的输出结果,在遍历时会调用系统默认的分隔符(IFS=" ")。ls这类命令的结果实际是在一行,按照空格进行分割的话,如上语法就OK了。

往往有时候是需要对命令行输出结果按行遍历的,如:
for line in `ls -lrt`;do
    #dosomething
done

 按照ls -lrt遍历文件的属性,此时直接这样就会发现分隔符还是用空格就不行了,这个时候,应该用如下方式:

oldifs="$IFS"
IFS=$'\n'
for line in `ls -lrt`;do
    #dosomething
done
IFS="$oldifs"

 如上所示是先把老的分隔符给保留到中间变量中,然后替换默认分隔符为换行符,再执行遍历,此时for遍历的时候就会按行遍历,最后执行完毕后再把系统分隔符给还原。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM