当一个奇怪的事情发生时,我正在玩shell脚本。我需要有人解释一下。
我有一个'infile'文件,内容:
line one
line2
third line
last
测试脚本test.sh,内容:
read var1
echo $var1
我执行了:
cat infile | ./test.sh
输出
line one
然后我做了:
cat infile | read var1
echo $var1
结果:一个空行。
我甚至尝试过
cat infile | read var1; echo $var1;
同样的结果。
为什么会这样?
答案 0 :(得分:1)
管道导致命令在子shell中运行,这意味着环境变量不会传播到主shell。使用重定向或herestring解决这个问题:
read var1 < infile
答案 1 :(得分:0)
或试试这个:
cat file | ( read var1; echo $var1; )