这是使用bash 4.3.48。
$ ARR=(entry1 entry2 entry3)
$ echo "${ARR[*]}"
entry1 entry2 entry3
Run Code Online (Sandbox Code Playgroud)
一切按预期进行,直到这里,但之后
$ { IFS=: ; echo "${ARR[*]}" ;}
entry1:entry2:entry3
Run Code Online (Sandbox Code Playgroud)
更改后,IFS被奇怪地永久性地更改了一半
$ echo "${ARR[*]}"
entry1:entry2:entry3
$ echo $IFS
$ echo "$IFS"
:
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)$ echo $IFS $ echo "$IFS" :
编写不带双引号的变量扩展会使其受到单词拆分(和通配符)的影响。单词拆分通过字符拆分字符串$IFS。在编写$var时,好像有一个隐藏的函数调用split+glob($var)。
如果您考虑一下,写$IFS不带引号注定会失败。它$IFS被里面的字符分开$IFS。多么元。无论$IFS设置为什么,结果都是一个空字符串:
$ (IFS='abc'; echo $IFS)
$ (IFS='<>'; echo $IFS)
$ (IFS='!@#$'; echo $IFS)
Run Code Online (Sandbox Code Playgroud)
课程:总是引用变量扩展。
$ (IFS='abc'; echo "$IFS")
abc
$ (IFS='<>'; echo "$IFS")
<>
$ (IFS='!@#$'; echo "$IFS")
!@#$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |