将 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
我有一个 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