我的配置文件:
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”:没有这样的文件或目录
感谢
答案 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,应该删除配置文件中的最后一个逗号。