当我使用"cat test.file"时,它会显示
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
当我使用bash文件时
cat test.file |
while read data
do
echo "$data"
done
Run Code Online (Sandbox Code Playgroud)
它会显示出来
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
我怎么能像原始测试文件一样制作结果?
Dig*_*oss 99
IFS=''
cat test.file |
while read data
do
echo "$data"
done
Run Code Online (Sandbox Code Playgroud)
我意识到你可能已经从真正需要管道的东西中简化了这个例子,但是在别人说出来之前:
IFS=''
while read data; do
echo "$data"
done < test.file
Run Code Online (Sandbox Code Playgroud)
Jos*_*ies 22
实际上,如果你没有为"read"调用提供参数,read将设置一个名为$ REPLY的默认变量,它将保留空格.所以你可以这样做:
$ cat test.file | while read; do echo "$REPLY"; done
Run Code Online (Sandbox Code Playgroud)
plh*_*lhn 10
也许IFS正如其他人所说,这是关键点。您只需在和IFS=之间添加。whileread
cat test.file |
while IFS= read data
do echo "$data"
done
Run Code Online (Sandbox Code Playgroud)
并且不要忘记引用$data,否则echo会修剪空格。
但正如Joshua Davies 提到的,您更愿意使用预定义的变量$REPLY。