看一下这个非常基本的 Bash 脚本:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< $(ps aux)
我的计算机上有多个进程,并且该ps aux
命令在终端中运行良好。
我只得到一循环中的迭代和ps
命令输出在同一行给出。为什么它没有按预期工作?
答案1
在bash
版本 <中,4.4-beta
您需要添加双引号:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< "$(ps aux)"
看:
- 为什么使用命令替换时换行符会丢失?
- 这里的字符串会进行分词吗?
正如文档一直所说的那样,Bash 不再拆分此处字符串的扩展。
一般来说,我认为使用进程替换更好:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done < <(ps aux)
(为了避免出现问题,你可能想使用IFS=
)。
或者更好的是,使用专门用于读取文件或逐行输入的程序,例如awk
.
ps aux | awk '{print $0; print "next one"}'