• read name 和 read 在 Bash 中的区别


    read 带一个参数和不带参数的区别是什么,我本以为仅仅是被赋值的变量的名字不同而已:

    $ read name

    1

    $ echo "$name"

    1

    $ read

    1

    $ echo "$REPLY"

    1

    当没有指定变量名时,read 会给默认的变量 REPLY 赋值,仅此而已。然而今天我却发现个细微的区别(下面为了显示空格故意加了背景色):

    $ read name

        1    

    $ echo "$name"

    1

    $ read

        1    

    $ echo "$REPLY"

        1    

    看到了吧,当你使用自定义的变量名时,用户输入的字符串中开头和尾部的 IFS 空白符都会被 strip 掉,而使用默认的 REPLY 变量时,就不会有这个操作。我翻了下 Bash 源码,找到了一段专门为这个行为写的注释:

    /* If there are no variables, save the text of the line read to the
    variable $REPLY. ksh93 strips leading and trailing IFS whitespace,
    so that `read x ; echo "$x"' and `read ; echo "$REPLY"' behave the
    same way, but I believe that the difference in behaviors is useful
    enough to not do it. Without the bash behavior, there is no way
    to read a line completely without interpretation or modification
    unless you mess with $IFS (e.g., setting it to the empty string).
    If you disagree, change the occurrences of `#if 0' to `#if 1' below. */

    也就是说,Bash 作者觉的,应该留一个方便的,不用改 IFS 就能让 Shell 能获取到用户完整的输入的字符串的小技巧。里面也说了,ksh 没有这个特殊处理,这是 Bash 自己发明的小把戏。

  • 相关阅读:
    Mysql第八天 分区与分表
    ios—项目开发需求文档
    spark资料下载
    网络爬虫:使用多线程爬取网页链接
    调用微信高级群发接口--视频群发接口出问题(微信官方文档错误纠正)
    享元模式
    在JAVA中怎样跳出当前的多重嵌套循环?
    获取个人借阅信息---图书馆client
    IOS 以随意点为圆心 旋转UIView
    ESP8266学习笔记4:ESP8266的SmartConfig
  • 原文地址:https://www.cnblogs.com/ziyunfei/p/4848383.html
Copyright © 2020-2023  润新知