拆分用分号分隔的单词

时间:2011-12-21 11:53:24

标签: linux bash shell terminal

我有一些像

这样的字符串

1; 2; 3; 4; 5

我希望能够逐个迭代这个字符串。对于第一次迭代,取下一个,取2和最后5。

我希望有这样的东西

for i in $(myVar)
do
echo $i
done

但我不知道如何填写myvar

4 个答案:

答案 0 :(得分:3)

如果仅为单个命令分配IFS变量,则无需备份IFS变量:

$ IFS=';' read -a words <<<"1;2;3;4;5"
$ for word in "${words[@]}"
do
    echo "$word"
done
1
2
3
4
5

其他有用的语法:

$ echo "${words[0]}"
1
$ echo "${words[@]: -1}"
5
$ echo "${words[@]}"
1 2 3 4 5

答案 1 :(得分:2)

最简单的方法可能是更改IFS环境变量:

OLDIFS="$IFS"
IFS=';'
for num in $a; do echo $num; done

# prints:
1
2
3
4
5

IFS="$OLDIFS"

记得要事后改回来,否则会发生奇怪的事情! :)

来自bash手册页:

   IFS    The Internal Field Separator that is  used  for  word  splitting
          after  expansion  and  to  split  lines into words with the read
          builtin  command.   The  default  value  is  ``<space><tab><new-
          line>''.

答案 2 :(得分:1)

echo '1;2;3;4;5' | tr \; \\n | while read line ; do echo $line; done

答案 3 :(得分:0)

这可能对您有用:

array=($(sed 'y/;/ /' <<<"1;2;3;4;5"))
for word in "${array[@]}"; do echo "$word"; done