查看Bash内建变量IFS的值

2018-04-23|Categories: Linux, Shell script|

问题

Bash内建变量IFS(Internal Field Separator,内部字段分隔符)的默认值是「空格、制表符、换行符」,所以,直接执行echo $IFS将输出空白,啥也看不到。怎么才能看到一片空白之后的「本质」呢?

解决方案

注意,在以下方案中,$IFS必须用双引号包围起来,否则会首先被Shell执行变量展开,再把展开之后的值(空格、制表符、换行符)作为参数传递给命令,最终得到错误的结果。

printf

$ printf %q "$IFS"
$' \t\n'

od

$ echo -n "$IFS" | od -abc
0000000  sp  ht  nl
        040 011 012
             \t  \n
0000003

set + grep

$ set | grep ^IFS
IFS=$' \t\n'

cat

$ echo -n "$IFS" | cat -vTE
 ^I$

设置IFS回到默认值

$ IFS=$' \t\n'

IFS先备份、再恢复

$ OLDIFS=$IFS IFS=$'\n'
$ # do something
$ IFS=$OLDIFS

声明

以上内容译自《Bash: Show IFS value》,感谢原作者的分享。

Leave A Comment