gpt4 book ai didi

bash - 当从 cat 管道传输到 while 循环时,为什么 return 在这个 Bash 函数中像 break 一样工作?

转载 作者:行者123 更新时间:2023-12-02 01:15:11 25 4
gpt4 key购买 nike

我有一个函数调用另一个函数,结果出乎意料:

#!/bin/bash

function doSomething() {
callee
echo $?
echo "It should go here!"
}

function callee() {
cat line.txt | while read ln
do
echo $ln
if [ 1 ] ;then
{ echo "This is callee" &&
return 2; }
fi
done
echo "It should not go here!"
}


doSomething

结果如下:

aa
This is callee
It should not go here!
0
It should go here!

为什么 return 在这里表现得像 break?我希望它退出 callee 函数,而不仅仅是中断循环。

最佳答案

这是因为您在 while 循环中使用管道,该循环在子 shell 中运行(在 Bash 中)。您是从子 shell 返回的,而不是函数。试试这个:

function callee() { 
while read ln
do
echo $ln
if [ 1 ] ;then
echo "This is callee"
return 2;
fi
done < line.txt
echo "It should not go to here!"
}

杀了猫!

关于bash - 当从 cat 管道传输到 while 循环时,为什么 return 在这个 Bash 函数中像 break 一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com