我有"如果声明"读取循环内部。\ n
示例1:
81 function processconfig2()
82 {
83 pattern='^monthly'
84 while read line
85 do
86 if [[ $line =~ $pattern ]]; then
87 echo $line
88 fi
89 done < /etc/logrotate.conf | awk '/^\/var\/log\/wtmp/, /^}/'
90
91 exit 0
92 }
输出为空。\ n 在第89行之后添加echo $ line:\ n
81 function processconfig2()
82 {
83 pattern='^monthly'
84 while read line
85 do
86 if [[ $line =~ $pattern ]]; then
87 echo $line
88 fi
89 echo $line
90 done < /etc/logrotate.conf | awk '/^\/var\/log\/wtmp/, /^}/'
91
92 exit 0
93 }
我得到了正确的输出(第86行的条件得到了正确处理):
/var/log/wtmp {
monthly
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
请有人向我解释这种奇怪的行为。
答案 0 :(得分:1)
您的问题是,您的awk
过滤器位于读取循环的输出上。因此,当您不回显整个文件时,您输出的信息不足以使awk匹配,因此会丢弃所有输出。
尝试不使用awk
过滤器来查看我的意思。
或者,在读取循环之前将awk过滤器移动到(我想这无论如何都是这个想法)。
pattern='^monthly'
while read line
do
if [[ $line =~ $pattern ]]; then
echo $line
fi
done < <(awk '/^\/var\/log\/wtmp/, /^}/' /etc/logrotate.conf)
答案 1 :(得分:0)
另一个工作示例:
81 function processconfig2()
82 {
83 pattern='^monthly'
84 content=`awk '/^\/var\/log\/wtmp/, /^}/' /etc/logrotate.conf`
85 while read line
86 do
87 if [[ $line =~ $pattern ]]; then
88 echo $line"twice"
89 fi
90 done <<< "$content"
91
92 exit 0
93 }