IFS为啥加双引号才能取到值呢

hphper 发布于 2017/02/20 14:17
阅读 98
收藏 0
[root@bogon sh]# IFS=':'
[root@bogon sh]# echo -n $IFS
[root@bogon sh]# echo -n "$IFS"
:[root@bogon sh]# 
[root@bogon sh]# a='ajax'
[root@bogon sh]# echo -n $a
ajax[root@bogon sh]# echo -n "$a"
ajax[root@bogon sh]# 

为啥对于IFS 来说必须用双引号才能取到呢?

IFS是特殊符号变量吗?

 

加载中
0
Lin_R
Lin_R
# 取自 man bash
IFS    The  Internal  Field Separator that is used for word splitting after expansion and to split      lines into words with the read builtin command.  The default value is ‘‘<space><tab><newline>’’.

IFS是一个特殊的变量, 内部字段分隔符, 原文解释在上面, 简单来说就是用于字符串扩展之后的分割

字符串扩展一般是 变量替换${} 进程替换$() 数学扩展$(())

所以当你echo ${IFS}, 因为扩展在分割, 也就没了

但是因为echo "${IFS}", 有双引号阻止了字符串的分割, 所以, : 可以显示出来

再举个例子:

[root@rundeck ~]# IFS="a"
[root@rundeck ~]# b=bac
[root@rundeck ~]# echo $b   # 被expansion 和 split
b c
[root@rundeck ~]# echo "$b" # 被expansion 但没split
bac

 

hphper
hphper
谢谢!,大概明白了
返回顶部
顶部