我想在shell脚本中利用.yml
中定义的变量。 yaml中的变量采用variable: value
的形式。我正在尝试的脚本中:
sed 's/\s*:\s*/=/' *vars.yml*
echo $variable
但是echo
不返回任何内容。是在Shell脚本中实现这种操作的一种方法吗?
答案 0 :(得分:1)
eval `sed 's/\s*:\s*/=/' *vars.yml*`
echo $variable
答案 1 :(得分:0)
例如,获取命令的输出
$cat vars.yml
var1: value1
var2: value2
var3: value3
$ cat 1.sh
source <(sed 's/\s*:\s*/=/' *vars.yml*)
echo $var1
echo $var2
echo $var3
输出:
value1
value2
value3
答案 2 :(得分:0)
请尝试以下操作:
while IFS= read -r line; do
declare "$(sed 's/[[:blank:]]*:[[:blank:]]*/=/' <<< "$line")"
done < file.yml
echo "$var1"
echo "$var2"
file.yml
:
var1: value1
var2: value2
输出:
value1
value2
[说明]
while
的{{1}}循环逐行读取输入文件read
将变量file.yml
分配给每个记录。line
创建一个名为declare var=value
的变量,然后
将其分配给var
。命令value
不仅接受文字
赋值,但表达式被视为赋值。
在这种情况下,declare
命令将行sed
转换为
var1: value1
,然后var1=value1
执行分配。declare
,除非您有完整的
以及由于潜在的安全风险而对输入文件的排他控制。
想象有一个邪恶的家伙在文件中添加了eval
行,
rm -rf ~/
未知。
使用eval
的风险应该小于declare
。