我有一个包含许多单词的字符串,每个单词之间至少有一个空格。我如何把字符串分割成单独的单词,这样我就可以循环遍历它们?
字符串作为参数传递。例如:${2}== "cat cat file"。我怎么循环呢?
另外,如何检查字符串是否包含空格?
我有一个包含许多单词的字符串,每个单词之间至少有一个空格。我如何把字符串分割成单独的单词,这样我就可以循环遍历它们?
字符串作为参数传递。例如:${2}== "cat cat file"。我怎么循环呢?
另外,如何检查字符串是否包含空格?
当前回答
$ echo foo bar baz | sed 's/ /\n/g'
foo
bar
baz
其他回答
我喜欢转换为数组,以便能够访问单个元素:
sentence="this is a story"
stringarray=($sentence)
现在你可以直接访问单个元素(它以0开头):
echo ${stringarray[0]}
或者转换回字符串以进行循环:
for i in "${stringarray[@]}"
do
:
# do whatever on $i
done
当然,之前已经回答了直接遍历字符串的问题,但这个回答的缺点是不能跟踪单独的元素以供以后使用:
for i in $sentence
do
:
# do whatever on $i
done
参见Bash数组参考。
echo $WORDS | xargs -n1 echo
这将输出每个单词,您可以处理该列表,因为您认为以后合适。
你试过把字符串变量传递给for循环吗?例如,Bash将自动对空白进行分割。
sentence="This is a sentence."
for word in $sentence
do
echo $word
done
This
is
a
sentence.
$ echo "This is a sentence." | tr -s " " "\012"
This
is
a
sentence.
要检查空格,使用grep:
$ echo "This is a sentence." | grep " " > /dev/null
$ echo $?
0
$ echo "Thisisasentence." | grep " " > /dev/null
$ echo $?
1
使用bash检查空格:
[[ "$str" = "${str% *}" ]] && echo "no spaces" || echo "has spaces"