Я в YAML массива:Преобразование YAML массив Bash массив
myarray:
- PHP
- Perl
- Python
Как преобразовать его в Баш массив с рубином?
Arr[0]='PHP'
Arr[1]='Perl'
Arr[2]='Python'
Я в YAML массива:Преобразование YAML массив Bash массив
myarray:
- PHP
- Perl
- Python
Как преобразовать его в Баш массив с рубином?
Arr[0]='PHP'
Arr[1]='Perl'
Arr[2]='Python'
Я не уверен, если это то, что вы хотите.
В рубина, разобрать массив YAML и написать выход для Bash, чтобы прочитать как массив:
require 'yaml'
yaml_array = <<-eos
myarray:
- PHP
- Perl
- Python
eos
yaml = YAML.load(yaml_array)
print "(#{yaml["myarray"].join(' ')})"
Этот рубиновый скрипт будет печатать (PHP Perl Python)
на стандартный вывод.
Вы можете использовать его в Bash:
$ eval array=$(ruby ruby_script.rb)
$ echo ${array[0]}
PHP
$ echo ${array[1]}
Perl
Отлично! Это так, как я хочу. Большое спасибо – Imaginaerum
Это будет безопаснее для оболочки: 'print '(\" # {yaml ["myarray"]. Join (' "" ')} \ ")" '- содержать любой элемент, содержащий пробельные символы –
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
Баш 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
Это избавляет от необходимости использовать eval
в оболочке
Что значит «преобразовать его в массив bash»? Что вы на самом деле пытаетесь сделать? – arco444
Я хочу создать config.sh из файла yaml для бродячего бокса ... – Imaginaerum