我有一个这样的文件:
(blank line)
[Test1]
a=1
b=2
c=3
我必须读取变量中a
, b
,的值,所以我使用了命令,它完成了这项工作。但对于第 2 行 ie ,它显示命令未找到。c
source
[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.