我有一个包含许多单词的字符串,每个单词之间至少有一个空格。我如何把字符串分割成单独的单词,这样我就可以循环遍历它们?

字符串作为参数传递。例如:${2}== "cat cat file"。我怎么循环呢?

另外,如何检查字符串是否包含空格?


当前回答

$ echo foo bar baz | sed 's/ /\n/g'

foo
bar
baz

其他回答

另一个例子(使用Perl):

$ echo foo bar baz | perl -nE 'say for split /\s/'
foo
bar
baz

你试过把字符串变量传递给for循环吗?例如,Bash将自动对空白进行分割。

sentence="This is   a sentence."
for word in $sentence
do
    echo $word
done

 

This
is
a
sentence.

$ echo foo bar baz | sed 's/ /\n/g'

foo
bar
baz
$ 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"