将字符串列表传递给for循环

rub*_*o77 6 bash

如何将列表传递给forbash?

我试过了

echo "some
different
lines
" | for i ; do 
  echo do something with $i; 
done
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我也试图找到一个解释,man但没有man for

编辑:

我知道,我可以使用while,但我想我曾经看过一个解决方案for,他们没有定义变量,但可以在循环内使用它

Aar*_*lla 11

这可能有用,但我不推荐它:

echo "some
different
lines
" | for i in $(cat) ; do
    ...
done
Run Code Online (Sandbox Code Playgroud)

$(cat)将扩展一切,stdin但如果echo包含空格的一行,for将认为这是两个单词.所以最终可能会破裂.

如果要在循环中处理单词列表,则更好:

a=($(echo "some
different
lines
"))
for i in "${a[@]}"; do
    ...
done
Run Code Online (Sandbox Code Playgroud)

说明:a=(...)声明一个数组.$(cmd...)扩展到命令的输出.它仍然容易受到空白的影响,但如果你引用得当,这可以修复.

"${a[@]}" 扩展为数组中正确引用的元素列表.

注意:for是内置命令.使用help for(在bash中)代替.


Tom*_*ech 10

for 迭代一个单词列表,如下所示:

for i in word1 word2 word3; do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)

使用while read循环迭代线:

echo "some
different
lines" | while read -r line; do echo "$line"; done
Run Code Online (Sandbox Code Playgroud)

这里有一些关于bash阅读线的有用阅读.