改变IFS会导致变量内容都成为字符串格式,$()、``对变量的操作都失效

版权声明:本文为博主思考总结而得,只做抛砖引玉,欢迎大家转载指导 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内容,不然很容易引起一些莫名其妙的问题。

猜你喜欢

转载自blog.csdn.net/hayre/article/details/86538164
今日推荐