bash – 为单个语句设置IFS
在我的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说:
但是,我注意到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仍然设置为:. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |