gpt4 book ai didi

linux - Unix shell 脚本 : assign value from file to variable into while loop, 并在循环外使用这个值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:54 24 4
gpt4 key购买 nike

我正在编写一个 shell 脚本,我必须在其中提取以下类型的文件的内容:

type1|valueA
type2|valueB
type1|valueC
type2|valueD
type3|valueE
....
typen|valueZ.

对于 column_1 中的每种类型,我都有一个目标变量,它连接相同类型的值,以获得如下结果:

var1=valueA,valueC
var2=valueB,valueD
var3=valueE
.....

脚本实现了这样的东西:

var1="HELLO"  
var2="WORLD"
...
cat $file | while read record; do
#estract column_1 and column_2 from $record
if [ $column_1 = "tipo1" ]; then
var1="$var1, column_2" ## column_2 = valueB
elif ....
....
fi
done

但是当我尝试使用链接 column_2 的任何变量的值时:

    echo "$var1 - $var2"   

我得到原始值:

    HELLO - WORLD.    

在互联网上搜索后,我了解到问题与以下事实有关:管道创建了一个复制实际值的子 shell 。

有没有办法解决这个问题!?

最重要的是,有一种方法适用于所有类型的 shell,事实上,这个脚本必须有可能在不同的 shell 上运行!?我不想使用文件支持来写入部分结果。

最佳答案

您不需要使用 cat。将某些内容通过管道传输到 while 中会创建一个子 shell。当子 shell 退出时,循环中设置的变量值将丢失(作为另一个示例使用 cd 的目录更改也是如此。相反,您应该将文件重定向到 done:

while condition
do
# do some stuff
done < inputfile

顺便说一句,而不是:

while read record

你可以这样做:

while IFS='|' read -r column1 column2

关于linux - Unix shell 脚本 : assign value from file to variable into while loop, 并在循环外使用这个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304390/

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