我在bash脚本中逐行读取文本文件,目标是捕获变量声明。
bash脚本:
#!/bin/bash
filePath=$1
while read line
do
if [[ $line =~ ^[[:blank:]]*([^#[:blank:]]+)[[:blank:]]*=[[:blank:]]*(.*) ]]
then
var=${BASH_REMATCH[1]}
value=${BASH_REMATCH[2]}
echo "$var=$value"
fi
done < "$filePath"
使用此文本文件(请注意,“c = 3”行是文件的最后一行):
# First variable
a=1
# Second variable
b = 2
# Third variable
c=3
输出结果为:
a=1
b=2
但是有了这个:
# First variable
a=1
# Second variable
b = 2
# Third variable
c=3
# empty line
输出结果为:
a=1
b=2
c=3
最后可能是一个空行,不需要评论。
有人可以解释为什么第一个例子中的正则表达式没有抓住最后一行吗?我该如何解决问题(除了在文本文件的末尾添加一个空行...)?谢谢
答案 0 :(得分:0)
while read line; do ... ; done
您的文件需要以换行符结束。
尝试:
while IFS= read -r line || [ -n "$line" ]; do