将 YAML 数组转换为 Bash 数组

Convert YAML array to Bash array

我有一个 YAML 数组:

myarray:
    - PHP
    - Perl
    - Python

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

Arr[0]='PHP'
Arr[1]='Perl'
Arr[2]='Python'
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

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

在 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) 打印到标准输出。

然后您可以在 Bash:

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

bash mapfile 命令可用于将标准输入行转换为数组:

$ 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