首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何剪切字符串并将其分配给for循环中的动态数组

如何剪切字符串并将其分配给for循环中的动态数组
EN

Stack Overflow用户
提问于 2015-08-07 18:34:13
回答 4查看 96关注 0票数 0

这就是我为了执行这个功能所做的,但我没有得到我想要的东西。

代码语言:javascript
复制
#!/bin/sh
DIRECTIONPART1=4-7-9 

for (( i=1; i<=3; i++ )) 
do 
x=`echo $DIRECTIONPART1| awk -F'-' '{print $i}'` 
myarray[$i]=$x 

done

for (( c=1; c<=3; c++ )) 
do 
echo ${myarray[$c]} 
done

我们在这一步意识到的问题

代码语言:javascript
复制
x=`echo $DIRECTIONPART1| awk -F'-' '{print $i}'` 

请帮我拿到结果

这是我得到的:

代码语言:javascript
复制
4-7-9 
4-7-9
4-7-9

但我想要的是:479

EN

回答 4

Stack Overflow用户

发布于 2015-08-07 19:26:10

你的问题路线是对的。问题是你不能在print中使用$i作为变量。我尝试了一些对我有效的变通方法:

代码语言:javascript
复制
x=`echo $DIRECTIONPART1| awk -F '-' -v var=$i '{print $var }'`

总的来说,它看起来像是:

代码语言:javascript
复制
#!/bin/sh
DIRECTIONPART1=4-7-9

for (( i=1; i<=3; i++ ))
do
x=`echo $DIRECTIONPART1| awk -F '-' -v var=$i '{print $var }'`
myarray[$i]=$x
done

for (( c=1; c<=3; c++ ))
do
echo ${myarray[$c]}
done

使用预期输出:

代码语言:javascript
复制
# sh test.sh
4
7
9
#
票数 0
EN

Stack Overflow用户

发布于 2015-08-07 19:27:11

获得所需输出的最简单的可移植方法是使用$IFS (在子subshell中):

代码语言:javascript
复制
#!/bin/sh
DIRECTIONPART1=4-7-9
(IFS=- && echo $DIRECTIONPART1)

shell数组不能移植,因为POSIX、ksh和bash在数组上不一致。POSIX没有;ksh和bash使用不同的语法。

如果你真的想要一个数组,我建议用awk来做所有的事情

代码语言:javascript
复制
#!/bin/sh
DIRECTIONPART1=4-7-9

awk -v v=${DIRECTIONPART1} 'BEGIN {
  n=split(v,a,"-")
  for (i=1;i<=n;i++) {
    print a[i]
  }
}'

这将为字符串中的每个值生成一行:

代码语言:javascript
复制
4
7
9

如果您想要bash阵列,请删除#!/bin/sh,然后执行以下操作:

代码语言:javascript
复制
#!/bin/bash
DIRECTIONPART1=4-7-9
A=( $(IFS=- && echo $DIRECTIONPART1) )

for ((i=0;i<=${#A[@]};i++))
do
  echo ${A[i]}
done
票数 0
EN

Stack Overflow用户

发布于 2015-08-07 19:38:10

多次甚至一次调用awk都不是正确的做法。使用bash内置read填充阵列。

代码语言:javascript
复制
# Note that the quotes here are only necessary to
# work around a bug that was fixed in bash 4.3. It
# doesn't hurt to use them in any version, though.
$ IFS=- read -a myarray <<< "$DIRECTIONPART_1"
$ printf '%s\n' "${myarray[@]}"
4
7
9
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31875655

复制
相关文章

相似问题

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