0%

shell读取文件内容遇到的坑

文件内容如下, 需要把1234读取赋值给shell内部的变量nodeid

1
2
cat a.conf
nodeid 1234

shell解析文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/sh

nodeid=0


set_nodeid1(){
cat a.conf | while read line
do
if [[ $line == nodeid* ]];
then
nodeid=${line:7}
fi
done
}

set_nodeid2(){
for line in `cat a.conf`
do
if [[ $line == nodeid* ]];
then
nodeid=${line:7}
fi
done
}

set_nodeid3(){
while read -r line
do
if [[ $line == nodeid* ]];
then
nodeid=${line:7}
fi
done < a.conf
}


set_nodeid1
echo "set_nodeid1 is $nodeid"
set_nodeid2
echo "set_nodeid2 is $nodeid"
set_nodeid3
echo "set_nodeid3 is $nodeid"

输出内容如下:

1
2
3
set_nodeid1 is 0
set_nodeid2 is
set_nodeid3 is 1234

第一种方式创建了子shell, 赋值是子shell的, 没有影响到全局变量.

第二种方式, for循环的方式, 因为a.conf中间空格导致的,把一行循环了两次, 所以赋值了空

第三种方式得到正确的结果

给作者打赏,可以加首页微信,咨询作者相关问题!