版权声明:本文为博主思考总结而得,只做抛砖引玉,欢迎大家转载指导 https://blog.csdn.net/hayre/article/details/86538164
IFS是linux内置的定义分隔符的一个全局变量,今天在写脚本时间定义了IFS分隔符为逗号(,)
IFS=","
引发了一个诡异的问题,故编写测试脚本进行测试,内容如下:
#!/bin/bash
a='echo hello world'
echo $($a)
IFS=$','
a='echo hello world'
echo $($a)
上面脚本如果是正常输出的话应该是会输出两行"hello world",但是实际运行结果如下图所示:
第二次的输出报出了异常,是因为第二次进行 $a
操作时,得到的内容并不是echo hello world
,而是'echo hello world'
, 改变了IFS内容,不知什么逻辑会导致$
取出来的变量内容都自动转成字符串的格式(变量两边都自动添加了单引号),所以此时使用
`$var`
$($var)
都将会失效。
所以当我们使用IFS重新定义分隔符内容时,应当控制好使用范围,及时恢复系统IFS内容,不然很容易引起一些莫名其妙的问题。