加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 为单个语句设置IFS

发布时间:2020-12-15 22:48:51 所属栏目:安全 来源:网络整理
导读:在我的GNU bash上,版本4.3.42(1) – 发布我正在对 answer a question进行一些测试.这个想法是将一个: – 分隔的字符串和它的每个元素分成一个数组. 为此,我尝试将IFS设置为:在命令的范围内,以便拆分是自动的,IFS保持不变: $myvar="a:b:c"$IFS=: d=($myvar
在我的GNU bash上,版本4.3.42(1) – 发布我正在对 answer a question进行一些测试.这个想法是将一个: – 分隔的字符串和它的每个元素分成一个数组.

为此,我尝试将IFS设置为:在命令的范围内,以便拆分是自动的,IFS保持不变:

$myvar="a:b:c"
$IFS=: d=($myvar)
$printf "%sn" ${d[@]}
a
b
c

显然IFS保持不变:

$echo $IFS
                      # empty

BASH reference说:

If IFS is unset,the parameters are separated by spaces. If IFS is
null,the parameters are joined without intervening separators.

但是,我注意到IFS有点坏了,所以echo $myvar返回一个b c而不是a:b:c.

取消设置值可以解决它:

$unset IFS
$echo $myvar
a:b:c

但我想知道:是什么导致了这个?是不是IFS =:命令在正在执行的命令范围内更改IFS?

我在Setting IFS for a single statement看到这确实有效:

$IFS=: eval 'd=($myvar)'
$echo $myvar
a:b:c

但我不明白它为什么会这样,而且IFS =:d =($myvar)没有.

解决方法

当我看到你使用它时,我会对此发表评论,但直到现在才发生问题.这条线

IFS=: d=($myvar)

不会暂时设置IFS;它只是在当前shell中设置两个变量. (简单命令可以使用本地环境设置作为前缀,但赋值语句本身并不是一个简单的命令.)

当你写作

echo $IFS

IFS扩展为:,但因为:是IFS的第一个字符,它在字拆分期间被删除.运用

echo "$IFS"

将表明IFS仍然设置为:.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读