假设我有一个输出字符串列表的命令
string1
string2
string3
.
.
stringN
如何在shell中循环显示列表的输出?
例如:
myVal=myCmd
for val in myVal
do
# do some stuff
end
(我对shell编程很新...)
答案 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
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