$ IFS $()是什么意思?

时间:2018-11-23 12:36:33

标签: bash shell

正如标题中所述,我对$IFS$()感到困惑,我在一个网站上看到它说$IFS$()可以代替空格,但是我不知道如何。谁能帮我吗?

1 个答案:

答案 0 :(得分:5)

通过$IFS$(),它们可能意味着它们将IFS从默认的空白更改为字符串的结尾。

来自bash手册页:

  

IFS内部字段分隔符,用于在扩展后进行单词拆分,并使用read Builtin命令将行拆分为单词。默认值为``<space><tab><newline>''

它们表示IFS=$()的行为与IFS=$'\0'相同,声明字段分隔符为空字符,表示字符串的结尾。

$()意味着在括号内返回命令的输出,这与您在终端中按Enter键的结果相同。

示例:

$ cat test
1 2 3 4 5   6    7
8 9

它将每个数字都作为新变量,因为每个空格(无论是单个空格,制表符还是换行都被视为字段分隔符)

$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9

如果将IFS更改为$(),则输出与文件中的输出相同:

$ IFS=$();for i in $(cat test); do echo $i; done
1 2 3 4 5   6    7
8 9

取消设置IFS,然后回到将IFS视为空白

$ unset IFS
$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9

您可以类似地使用$'\0'将IFS更改为空字符

$ IFS=$'\0';for i in $(cat test); do echo $i; done
1 2 3 4 5   6    7
8 9

IFS=$()IFS=IFS=""基本相同,您声明它等于空字符串,因此bash会寻找字符串的结尾作为分隔符。