bash:sed后如何从section配置文件中获取数组?

时间:2017-11-19 23:07:26

标签: arrays bash config

我的配置文件:

sed -n '1,/animals/d;/\[/,$d;/^$/d;p;'

在其他question我发现了这个:

test@test_server$: sed -n '1,/animals/d;/\[/,$d;/^$/d;p;' config_file

CATS=("cat" "food" "eur" "100" "150" )
DOGS=("dog" "food" "usd" "5000" "8000")

并且效果很好:

#!/bin/bash
source  $(sed -n '1,/animals/d;/\[/,$d;/^$/d;p;' config) 
echo $DOGS

但我无法在我的shell脚本中找到一个部分:

max-width

给我

错误: ./testit.sh:line 3:CATS =(“cat”:没有这样的文件或目录

感谢

3 个答案:

答案 0 :(得分:0)

source将文件作为参数。表达式:

$(sed -n '1,/animals/d;/\[/,$d;/^$/d;p;' config)

不是文件。

您可以将其重写为(注意使用-i进行文件的原位修改):

sed -i -n '1,/animals/d;/\[/,$d;/^$/d;p;' config
source config

答案 1 :(得分:0)

source需要一个参数文件。因此,替换:

source  $(sed -n '1,/animals/d;/\[/,$d;/^$/d;p;' config) 

使用:

source  <(sed -n '1,/animals/d;/\[/,$d;/^$/d;p;' config) 

bash构造<(...)称为进程替换。它创建了一个source可以读取的类文件对象。与$(...)相反,后者称为命令替换,它会创建一个字符串。

答案 2 :(得分:0)

我们应该使用eval来执行sed命令的结果,而不要忘记双引号。

#!/bin/bash
eval "$(sed -n '1,/animals/d;/\[/,$d;/^$/d;p;' config)"
echo $DOGS
echo "${DOGS[2]}"

BTW,应该删除配置文件中的最后一个逗号。