我有这个shell脚本
#!/bin/bash
LINES=$(awk '{ print }' filename.txt)
for LINE in $LINES; do
echo "$LINE"
done
并且filename.txt具有此内容
Loreum ipsum dolores
Loreum perche non se imortale
shell脚本正在迭代filename.txt中所有行的空格,而它应该只循环那两行。
但是当我在终端输入“awk'{print}'filename.txt”时,它会循环好。 有什么解释吗?
提前致谢!
答案 0 :(得分:3)
$(...)
构造将来自awk的 all 输出吸收为一个大字符串,然后for LINE in $LINES
在空格上分割。你想要这个结构:
#! /bin/sh
while read LINE; do
printf '%s\n' "$LINE"
done < filename.txt
答案 1 :(得分:1)
其他答案都很好,您可以做的另一件事是临时更改您的IFS(内部字段分隔符)变量。如果您将shell脚本更新为如下所示:
#!/bin/bash
IFS="
"
LINES=$(awk '{ print }' filename.txt)
for LINE in $LINES; do
echo "$LINE"
done
这会将IFS更新为换行符,而不是''也应该做你想要的。
只是另一个建议。
答案 2 :(得分:0)