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 自己发明的小把戏。
read name 和 read 在 Bash 中的区别相关推荐
- bash中(),{},(()),[],[[]]的区别
前言:在bash中遇到各种括号,同时在进行字符数值比较判定时,总是不断出现问题,于是通过参考<advanced bash-scripting guide>,同时在centos 6.7版本上 ...
- 如何在 bash 中使用索引数组
数组是一种数据结构,表示具有相同数据类型的对象集合.bash shell中支持两种类型的数组:关联数组或索引数组.在本文中,将演示如何在 bash 中使用索引数组.以下使用 shell 示例来说明索引 ...
- 如何在 bash 中使用键值字典
在字典中,字典存储一组键,每个键都有一个与之关联的值.可以使用对应的键在字典中插入.检索或更新值.字典数据结构针对基于键值的快速检索进行了优化,因此通常使用哈希表来实现.在不同的编程语言中,字典通常有 ...
- 2.7-egrep及bash中的变量
egrep及扩展的正则表达式 egrep=grep -E grep [OPTIONS] PATTERN [FILE...] 扩展正则表达式的元字符: 字符匹配: .: []: [^]: 次数匹配: * ...
- linux bash中too many arguments问题的解决方法
linux bash中too many arguments问题的解决方法 参考文章: (1)linux bash中too many arguments问题的解决方法 (2)https://www.cn ...
- 如何在Bash中加入数组元素?
如果我在Bash中有这样的数组: FOO=( a b c ) 如何用逗号将元素加入? 例如,产生a,b,c . #1楼 重复使用@无关紧要的解决方案,但是通过避免$ {:1}的替换和避免中间变量的使用 ...
- Bash中的管道输出和捕获退出状态
我想执行Bash中长时间运行的命令,都捕获它的退出状态,并且发球它的输出. 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee而不是命令的退出状态. ...
- 如何在Bash中比较字符串
如何将变量与字符串进行比较(如果匹配则执行某些操作)? #1楼 要将字符串与通配符进行比较,请使用 if [[ "$stringA" == *$stringB* ]]; then# ...
- 如何检查Bash中是否设置了变量?
我如何知道是否在Bash中设置了变量? 例如,如何检查用户是否将第一个参数赋予函数? function a {# if $1 is set ? } #1楼 检查是否设置了变量 var="&q ...
最新文章
- access-control-allow-origin php,PHP通过Access-Control-Allow-Origin 跨域
- Ubuntu下添添加的用户没有sudo权限的解决办法
- 【白话机器学习】算法理论+实战之支持向量机(SVM)
- 【转】Hibernate和IBatis对比
- k3s文档:中文文档地址
- [LeetCode] Add Digits - 数字各个位数求和
- MongoDb 大数据查询优化、 MongoDB 索引、复合索引、唯一索引、 explain 分 析查询速度
- MATLAB显示错误使用untitled,使用Matlab 2016a阻止集合构建错误
- 【底层原理】x86-64体系下一个奇怪问题的定位
- vue如何编写组件可以通过Vue.use()使用
- Ubuntu 16.04安装Docker
- javascript快速入门(二):JS浏览器操作
- 产品经理如何搭建自己的知识地图?
- http://www.eoeandroid.com/thread-153979-1-1.html
- 破解Prezi桌面版30天限制的方法
- 基于arduino ws2812b简单的渐变代码
- 山东农业大学计算机考研资料汇总
- python如何编写温度转换_用python写温度转换
- 2014年 IT 行业校招待遇
- 数学建模(2)--TOPSIS法