首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ISF从输入的Bash数组

使用ISF从输入的Bash数组
EN

Stack Overflow用户
提问于 2018-04-17 01:52:56
回答 2查看 168关注 0票数 1

我用1,3,5,7-10的方式给出了一个字符串.这需要放在一个1,3,5,7,8,9,10的数组中,所以只要有一个负号,我就需要加一个缺失的数字。我可以使用IFS将它分割成一个数组,在任何有逗号的地方都可以选择。问题是,当我再次使用IFS除以7-10这样的两个数字时,它不会将它们分开。这是我的代码:

代码语言:javascript
运行
复制
IFS=', ' read -r -a array <<< "$string"

for index in "${!array[@]}"
do
    if [[ ${array[index]} == *[-]* ]]; then
    IFS='- ' read -r array2 <<< "${array[index]}"
    #for Counter in $(eval echo "{${array2[0]}...${array2[1]}}")
    #do
        #echo "$Counter ${array2[Counter]}"
    echo "0 ${array2[0]}"
    echo "Yes"
    #done
    fi
done

for index in "${!array[@]}"
do
    echo "$index ${array[index]}"
done

第二个IFS的输出给了我7-10,这意味着它没有分裂它(从代码中可以看出,我遇到了一些麻烦。我们的想法是拆分它,并在for循环中使用它来附加到我现有的数组中所需的数字。)

如果你能给我指明正确的方向,告诉我为什么这不起作用,或者提出一个更好的主意,那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-17 03:05:11

下面是对您的代码的轻微更新,它将适用于您想要的内容:

代码语言:javascript
运行
复制
str="1, 2, 3, 5, 7-10, 11, 12, 15-20, 24"   

IFS=', ' read -r -a arr <<< "$str"

# Empty array, populated in the for-loops below
array=()          

for elem in ${arr[@]}; do
    if [[ $elem == *[-]* ]]; then
        IFS='-' read -r -a minMax <<< $elem
        for (( j = ${minMax[0]}; j <= ${minMax[1]}; j++ )); do
            array+=($j)
        done
    else
        array+=($elem)
    fi
done

echo ${array[@]}

将产生以下结果:

代码语言:javascript
运行
复制
1 2 3 5 7 8 9 10 11 12 15 16 17 18 19 20 24
票数 0
EN

Stack Overflow用户

发布于 2018-04-17 04:00:51

不用循环,

代码语言:javascript
运行
复制
string="1,3, 5, 7-10"
string=$(echo "$string" | sed -e 's/\(\([0-9]\+\)-\([0-9]\+\)\)/{\2..\3}/g' | sed -e 's/,/ /g')
eval declare -a array=("$string")
echo ${array[*]}

产额

代码语言:javascript
运行
复制
1 3 5 7 8 9 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49868670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档