将YAML数组转换为Bash数组

时间:2015-01-23 13:39:24

标签: ruby bash yaml

' ave和 YAML 数组:

myarray:
    - PHP
    - Perl
    - Python

如何使用 ruby​​ 将其转换为bash数组?

Arr[0]='PHP'
Arr[1]='Perl'
Arr[2]='Python'

3 个答案:

答案 0 :(得分:3)

我不确定这是不是你想要的。

在ruby中,解析yaml数组并为Bash编写输出以读取数组:

require 'yaml'

yaml_array = <<-eos
myarray:
    - PHP
    - Perl
    - Python
eos

yaml = YAML.load(yaml_array)
print "(#{yaml["myarray"].join(' ')})"

此ruby脚本会将(PHP Perl Python)打印到stdout。

然后你可以在Bash中使用它:

$ eval array=$(ruby ruby_script.rb)
$ echo ${array[0]}
PHP
$ echo ${array[1]}
Perl

答案 1 :(得分:2)

require 'yaml'

yaml_text = "myarray:
    - PHP
    - Perl
    - Python"

yaml = YAML.load(yaml_text)
array = yaml["myarray"]

puts array.class #=> Array
puts array       #=> PHP
                 #=> Perl
                 #=> Python

答案 2 :(得分:2)

bash mapfile命令可用于将stdin行转换为数组:

$ cat file.yaml 
myarray:
    - PHP
    - Perl
    - Python
    - element with spaces

$ mapfile -t array < <(ruby -ryaml -e 'yaml = YAML.load(File.read(ARGV.shift)); puts yaml["myarray"].join("\n")' file.yaml)

$ for i in "${!array[@]}"; do echo "$i  ${array[i]}"; done
0  PHP
1  Perl
2  Python
3  element with spaces

这避免了必须在shell中使用eval