正如标题中所述,我对$IFS$()
感到困惑,我在一个网站上看到它说$IFS$()
可以代替空格,但是我不知道如何。谁能帮我吗?
答案 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会寻找字符串的结尾作为分隔符。