如何将一行分割成由bash中的一个或多个空格分隔的单词?

我意识到如何在Python中做到这一点

line = db_file.readline() ll=string.split(line) 

但我怎么能在bash中做同样的事情? 真的有可能以这么简单的方式做到这一点?

 s='foo bar baz' a=( $s ) echo ${a[0]} echo ${a[1]} ... 

这取决于你分裂的意思。 如果你想迭代一个行中的单词,它是一个variables,你可以迭代。 例如,假设variableslinethis is a line 。 那么你可以这样做:

 for word in $line; do echo $word; done 

这将打印:

 this is a line 

for .. in $var使用$IFS的值分割$var ,默认值表示“分割空白和换行符”。

如果你想读取用户或文件的行,你可以做一些事情:

 cat $filename | while read line do echo "Processing new line" >/dev/tty for word in $line do echo $word done done 

对于其他任何事情,你需要更加明确,并更详细地定义你的问题。

:编辑删除bashism,但我仍然保持cat $filename | ... 因为我喜欢它而不是redirect。

如果你想要一个特定的单词,awk可能是有用的,例如

 $ echo $ LINE |  awk'{print $ 2}'

在$ LINE中打印第二个空格分隔的单词。 你也可以分割其他的字符,例如

 $ echo“5:6:7”|  awk -F:'{print $ 2}'
 6
 echo $line | tr " " "\n" 

给出类似于上面大多数答案的输出; 不使用循环。

在你的情况下,你也提到ll=<...output...>
所以,(鉴于我不知道很多python,并假设你需要将输出分配给一个variables),

 ll=`echo $line | tr " " "\n"` 

应该足够了(记得echo "$ll"而不是echo $ll

 $ line="these are words" $ ll=($line) $ declare -p ll # dump the array declare -a ll='([0]="these" [1]="are" [2]="words")' $ for w in ${ll[@]}; do echo $w; done these are words 

做这个

 while read -r line do set -- $line echo "$1 $2" done <"file" 

1美元,2美元等将是你的第一和第二拆分“领域”。 使用$ @来获取所有值。使用$#来获得“字段”的长度。

更简单,

 echo $line | sed 's/\s/\n/g' 

\ s – >空格字符(空格,制表符,NL,FF,VT,CR)。 在许多系统中也有效[:space:]

\ n – >换行

read-a选项将允许您分割由$IFS包含的字符读入的行。

如果你已经在variables$ LINE中有你的文本行,那么你应该可以这样说

 for L in $LINE; do echo $L; done