通过$IFS$()
它们可能意味着它们将IFS从默认空白区域更改为字符串结尾.
从bash联机帮助页:
IFS内部字段分隔符,用于扩展后的单词拆分,并使用read builtin命令将行拆分为单词.默认值为
``<space><tab><newline>''
.
它们意味着它们执行IFS=$()
的操作与执行操作相同IFS=$'\0'
,声明字段分隔符为空字符,这标记字符串的结尾.
$()
表示在括号内返回命令的输出,这与您在终端中按Enter键相同.
例:
$ cat test
1 2 3 4 5 6 7
8 9
Run Code Online (Sandbox Code Playgroud)
它将每个数字作为新变量,因为每个空格(无论是单个空格,制表符还是新行都被视为字段分隔符)
$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
如果我们将IFS更改为$()
,则输出与文件中的输出相同:
$ IFS=$();for i in $(cat test); do echo $i; done
1 2 3 4 5 6 7
8 9
Run Code Online (Sandbox Code Playgroud)
取消设置IFS,它会回到IFS看空白区域
$ unset IFS
$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
您可以类似地将IFS更改为null字符 $'\0'
$ IFS=$'\0';for i in $(cat test); do echo $i; done
1 2 3 4 5 6 7
8 9
Run Code Online (Sandbox Code Playgroud)
IFS=$()
基本上和IFS=
or 相同IFS=""
,你声明它等于空字符串,所以bash查找字符串结尾作为分隔符.