我观察到一种我不会动摇的行为,并希望有人对此有所了解。
我有两个脚本,都是从STDIN读取的。
从键盘读取一系列数字(1输入2输入3输入...)
脚本A每次都打印“x”
#!/bin/bash
while read LINE
do
echo "x" # this happens everytime
echo $LINE # this is the only different line
done
output:
1
x
1
2
x
2
3
x
3
4
x
4
5
x
5
脚本B仅在第一次读取LINE
时打印“x”#!/bin/bash
while read LINE
do
echo "x" # this happens only the first time
awk '{print $LINE}' # this is the only different line
done
output:
1
x
2
2
3
3
4
4
5
5
有人可以解释一下吗?
答案 0 :(得分:3)
循环仍处于第一次迭代中。 awk
正在读取所有连续输入,而不是read
命令。 awk
语句也不会打印shell变量LINE
的值,因为它不会在单引号内展开。相反,awk
看到其内部变量LINE
未定义,并将其视为值为0. awk
然后打印$0
的值,即{{1}}的值它从标准输入读取。
答案 1 :(得分:2)
awk控制了你的stdin。如果在命令行上键入以下内容,您将看到会发生什么。
awk '{print $LINE}'
你的ctrl-D会把stdin完成到awk并带你回到while循环。