gpt4 book ai didi

linux - bash shell 脚本和脚本中函数的可变范围

转载 作者:IT王子 更新时间:2023-10-29 00:14:12 25 4
gpt4 key购买 nike

关于函数、变量范围和可能的子 shell,我对我的脚本有些困惑。我在另一个post看到该管道生成一个子 shell,而父 shell 无法从该子 shell 访问变量。 cmd 在反引号中运行也是同样的情况吗?

为了不让人厌烦,我缩短了 100 多行的脚本,但我尽量记住保留重要元素(即反引号、竖线等)。希望我没有遗漏任何东西。

global1=0
global2=0
start_read=true

function testfunc {
global1=9999
global2=1111
echo "in testfunc"
echo $global1
echo $global2
}

file1=whocares
file2=whocares2

for line in `cat $file1`
do
for i in `grep -P "\w+ stream" $file2 | grep "$line"` # possible but unlikely problem spot
do
end=$(echo $i | cut -d ' ' -f 1-4 | cut -d ',' -f 1) # possible but unlikely spot
duration=`testfunc $end` # more likely problem spot
done
done

echo "global1 = $global1"
echo "global2 = $global2"

因此,当我运行我的脚本时,最后一行显示 global1 = 0。但是,在我的函数 testfunc 中,global1 被设置为 9999,调试消息至少在函数中打印出它,它是 9999。

这里有两个问题:

  1. 反引号是否会产生一个子 shell,从而使我的脚本不工作?
  2. 我该如何解决这个问题?

最佳答案

你可以尝试类似的东西

global1=0
global2=0
start_read=true

function testfunc {
global1=9999
global2=1111
echo "in testfunc"
echo $global1
echo $global2
duration=something
}

file1=whocares
file2=whocares2

for line in `cat $file1`
do
for i in `grep -P "\w+ stream" $file2 | grep "$line"` # possible but unlikely problem spot
do
end=$(echo $i | cut -d ' ' -f 1-4 | cut -d ',' -f 1) # possible but unlikely spot
testfunc $end # more likely problem spot
done
done

echo "global1 = $global1"
echo "global2 = $global2"

关于linux - bash shell 脚本和脚本中函数的可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006674/

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