文件中不包含等于 (=) 的行的源命令

文件中不包含等于 (=) 的行的源命令

我有一个这样的文件:

(blank line)
[Test1]
a=1
b=2
c=3

我必须读取变量中a, b,的值,所以我使用了命令,它完成了这项工作。但对于第 2 行 ie ,它显示命令未找到。csource[Test1]

我怎样才能接受[Test1]一个变量呢?

基本上我期待:

$some_var=[Test1]
$a=1
$b=2
$c=3

所以我可以进一步使用这些值。

目前我正在做的是从文件中删除前两行,然后删除source file,通过这样做,我不会在变量中获取第 2 行。我正在寻找更好的方法。我正在 bash 脚本中完成这一切。

答案1

假设您有进程替换,您可以执行以下操作:

source <(sed 's/^\[/some_var=\[/' file)

答案2

如果文件不大(自 bash 4.4 起):

readarray -t arr <infile         # the value in zero is a blank line.
some_var="${arr[1]}"             # use the first line.
. <(printf '%s\n' "${arr[@]:2}") # source the rest.
echo "some_var=$some_var a=$a a=$b a=$c"

执行时:

$ ./script
some_var=[Test1] a=1 a=2 a=3

对于较旧的 bash,解决方案变得更加复杂,但也是可能的。
这与 bash 2.04 (2000-03-21) 以来的版本相同。

unset arr; i=0
while IFS='' read -r a ; do arr[i]="$a"; ((i++));done <infile
some_var="${arr[1]}"                    # use the first line.
. <(printf '%s\n' "${arr[@]:2}")        # source the rest.

相关内容