zoukankan      html  css  js  c++  java
  • Shell:IFS

    IFS

    在shell中使用内部变量IFS来决定项目列表或值列表的分隔符,IFS的默认值是空格、Tab制表或换行符。

    使用for循环读取项目列表或值列表时,就会根据IFS的值判断列表中值的个数,最终决定循环的次数。

    例如:A="hello word linux",使用空格作为分隔符时,变量A有三列,使用w作为分隔符,变量A有两列。

    IFS的多个值之间是“或”关系。

    正常使用echo输出IFS变量的值时,是看不到内容的,但是可以通过od命令将数据转换为八进制数据后再查看。

    image-20210715214523135

    040是空格键,011是Tab制表符,012是换行符。

    案例:

    下面因为修改了默认的IFS为冒号,所以变量只有冒号分割时,才能让x,y,z都能够按照我们想要的去赋值。

    [root@localhost ~]# OLD_IFS="$IFS"
    [root@localhost ~]# IFS=":"
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1 2 3
    #因为冒号作为分隔符,而1 2 3之间没有冒号,所以1 2 3直接赋值给x,y和z都为空
    [root@localhost ~]# echo $x
    1 2 3
    [root@localhost ~]# echo $y
    
    [root@localhost ~]# echo $z
    
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1:2:3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    [root@localhost ~]# IFS=$OLD_IFS
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1 2 3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    

    此外也可以定义多个分隔符:

    [root@localhost ~]# OLD_IFS="$IFS"
    [root@localhost ~]# IFS=":;."
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1.2:3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    [root@localhost ~]# IFS=$OLD_IFS
    

    我们可以设置特殊的控制字符吗,例如IFS=" "

    [root@localhost ~]# OLD_IFS="$IFS"
    [root@localhost ~]# IFS="	"
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1  2       3
    [root@localhost ~]# echo $x
    1       2       3
    [root@localhost ~]# echo $y
    
    [root@localhost ~]# echo $z
    
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1t2t3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    

    很显然,这里会使用字母t作为默认分隔符,因为这里是转义、屏蔽的意思,对后面的t进行屏蔽,意思就是一个普通的字母t。

    那么如何设置特殊的控制字符作为分隔符呢?必须使用$'string'的方式,否则系统无法正确的理解特殊字符的含义。

    特殊的控制字符如下:

    控制字符 描述
    a Bell响铃符
     Backspace退格符
    f Form Feed换行符,光标仍旧停留在原来的位置
    New Line换行符,光标停留在行首
    Return光标移至行首,但不换行
    Horizontal Tab水平制表符
    v Vertical Tab垂直制表符
    nn 任意八进制字符

    测试:

    [root@localhost ~]# IFS=$'	'
    [root@localhost ~]# read -p "输入三个数据:" x y z
    输入三个数据:1  2       3
    [root@localhost ~]# echo $x
    1
    [root@localhost ~]# echo $y
    2
    [root@localhost ~]# echo $z
    3
    

    如何通过命令将IFS变量的值还原为默认值?命令如下:

    IFS=$' 	
    '
    
  • 相关阅读:
    js实现input button从不可用变为可用
    eclipse工程名出现小红叉的解决办法
    jQuery的dataTables插件实现中文排序
    禁用鼠标选中DOM
    获取当前JS所在文件夹
    解决方案:在移动端输入框在软键盘弹出后位置矫正
    MUI版本升级更新程序IOS和andriod
    JavaScript输入表单数据正则验证规则
    Windows安裝PHP環境
    CentOS下安装PHP
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/15017784.html
Copyright © 2011-2022 走看看