我有一些像
这样的字符串1; 2; 3; 4; 5
我希望能够逐个迭代这个字符串。对于第一次迭代,取下一个,取2和最后5。
我希望有这样的东西
for i in $(myVar)
do
echo $i
done
但我不知道如何填写myvar
答案 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