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

arrays – 使用IFS将字符串Bash转换为数组

发布时间:2020-12-15 22:18:22 所属栏目:安全 来源:网络整理
导读:我在使用IFS将我的字符串转换为数组时遇到问题.这是我的字符串: "Jun01 Jun02 Jun03 Jun04 Jun05 ..." #in that format,separated by spaces 这是我尝试过的代码: IFS=" " #set it to space characterDATES_ARRAY=($DATES_STRING) #from aboveecho ${DATES
我在使用IFS将我的字符串转换为数组时遇到问题.这是我的字符串:

"Jun01 Jun02 Jun03 Jun04 Jun05 ..." #in that format,separated by spaces

这是我尝试过的代码:

IFS=" " #set it to space character
DATES_ARRAY=($DATES_STRING) #from above
echo ${DATES_ARRAY[0]} #output is empty

但是,当我删除I??FS线时,它的工作原理.但我使用几行打印出其默认的ASCII值,我得到’32’,这意味着’空格’字符.作为一名OCD程序员,我想把它自己设置为安全……我不知道它是如何预先设定的!

那么为什么尝试手动将IFS设置为Space不起作用?

解决方法

它确实有效,但无论如何都是不必要的,因为默认情况下保证空间在IFS中.不要手动设置.这样做可能会导致问题.

基本上,永远不要在Bash中使用分词.如果使用得非常小心,有时需要咬住子弹并使用它限制在POSIX sh.如果您要设置IFS,请将其设置在少数具有某些效果的命令之一的环境中,或者最多设置在本地功能的环境中.

你永远不需要使用它,所以我不会解释一切:

$printf -v str '%s ' Jun{01..10}
$set -f
$IFS=' ' declare -a 'arr=($str)'
$declare -p arr
declare -a arr='([0]="Jun01" [1]="Jun02" [2]="Jun03" [3]="Jun04" [4]="Jun05" [5]="Jun06" [6]="Jun07" [7]="Jun08" [8]="Jun09" [9]="Jun10")'

IFS在这里冗余设置空间以显示它的工作原理.

从字符串到数组的最正确方法可能是使用read.很多例子here.

cannonical方法是:

read -ra arr <<<"$str"

其中IFS可选地在读取环境中设置,如果它不是空格,则用作分隔符.

(编辑:李大同)

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

    推荐文章
      热点阅读