如何在shell中循环列表?

时间:2016-09-16 04:52:29

标签: bash shell

假设我有一个输出字符串列表的命令

string1
string2
string3
.
.
stringN

如何在shell中循环显示列表的输出?

例如:

myVal=myCmd
for val in myVal
  do
    # do some stuff
  end

(我对shell编程很新...)

2 个答案:

答案 0 :(得分:3)

使用bash while-loop,可以通过命令或输入文件完成循环。

while IFS= read -r string
do 
    some_stuff to do
done < <(command_that_produces_string)

举个例子,我有一个内容为

的示例文件
$ cat file
My
name
is not 
relevant
here

我修改了脚本,以便在读取文件

时回显该行
$ cat script.sh
#!/bin/bash
while IFS= read -r string
do
    echo "$string"
done < file

./script.sh

运行时生成o / p
My
name
is not
relevant
here

同样也可以通过bash-command完成,我们采用process-substitution (<())在子shell上运行命令。

#!/bin/bash

while IFS= read -r -d '' file; do
    echo "$file"
done < <(find . -maxdepth 1 -mindepth 1 -name "*.txt" -type f -print0)

上面的简单find列出了当前目录中的所有文件(包括带空格/特殊字符的文件)。这里,find命令的输出被送到stdin,由while-loop解析。

答案 1 :(得分:-1)

你非常接近,不知道是否只是导致问题的剪切和粘贴/拼写错误 - 请注意第1行的引号和第2行的$。

myVal=`echo "a b c"`
for val in $myVal
do
    echo "$val"
done