' ave和 YAML 数组:
myarray:
- PHP
- Perl
- Python
如何使用 ruby 将其转换为bash数组?
Arr[0]='PHP'
Arr[1]='Perl'
Arr[2]='Python'
答案 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