【发布时间】:2015-04-05 11:44:04
【问题描述】:
我正在尝试 grep 匹配某些模式的行,然后尝试打印那些匹配的行。
#!/bin/bash
file=/path/to/some/file
pattern=socket
if [ -f $file ]; then
lines=`grep -i "$pattern" $file`
# Case 1
for x in $lines; do # <--- isn't this an array
echo "$x"
done
# Case 2
while read -r line_a; do
echo "$line_a"
done <<< "$lines"
fi
输出:
案例 1:每行都打印这些行中的单个单词,而不是完整的行。
案例 2:打印单独的行。
问题:
为什么 case 1 不在一行上打印整行,而不是在每一行上打印该行中的单个单词? $lines 不是一个字符串数组(在我的例子中是行)吗?
【问题讨论】:
-
不,它不是一个数组,您可以使用反引号将
grep的结果捕获为一个大字符串。我猜 for 循环将空格视为记录分隔符,因此每个单词都被视为一个元素