我已经在HP / UX下面的脚本中运行并获得了输出:
Exiting #1
Exiting #2
但我希望输出:
Exiting #1
脚本文件:
data="aaa; bbb; ccc"
echo $data | while IFS=';' read -ra array; do
echo "Exiting #1"
exit -1
done
echo "Exiting #2"
exit 0
我该如何解决这个问题? 感谢。
答案 0 :(得分:3)
由于管道,循环中的命令在子shell中运行。当您调用exit时,只会终止子shell,而不是父进程。
您可以使用shopt -s lastpipe
,通过使用流程替换来解决此问题
while IFS=';' read -ra array; do
echo "Exiting #1"
exit -1
done < <(echo "$data")
或使用here-string
while IFS=';' read -ra array; do
echo "Exiting #1"
exit -1
done <<< "$data"
答案 1 :(得分:2)
当你在循环中执行exit -1
时,它只会退出由于管道而创建的子进程。重写它以使用here-string:
while IFS=';' read -ra array; do
echo "Exiting #1"
exit -1
done <<< ${data}
现在,您将获得预期的输出。