Bob*_*421 3 bash command-substitution read here-string
看看这个非常基本的 Bash 脚本:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< $(ps aux)
Run Code Online (Sandbox Code Playgroud)
我的计算机上有多个进程,该ps aux命令在终端中运行良好。
我在循环中只得到一次迭代,ps命令输出在同一行给出。为什么它不能按预期工作?
在bash版本 <4.4-beta您需要添加双引号:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< "$(ps aux)"
Run Code Online (Sandbox Code Playgroud)
看:
Bash 不再拆分 here-strings 的扩展,正如文档中一直所说的那样。
一般来说,我认为最好使用进程替换:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done < <(ps aux)
Run Code Online (Sandbox Code Playgroud)
(为避免出现问题,您可能需要使用IFS=)。
或者更好的是,使用专门用于读取文件或逐行输入的程序,例如awk.
ps aux | awk '{print $0; print "next one"}'
Run Code Online (Sandbox Code Playgroud)