порядок на список файлов

Если Вы не объявляете переменную как ассоциативный массив, то

klang=([string_0]='element_0' [string_1]='element_1' [string_2]='element_2')

взят в качестве нормального присваивания массива (хотя примечание это в bash и ksh93, нормальные массивы не являются действительно нормальными массивами, они - более разреженные массивы или ассоциативные массивы с ключами, ограниченными положительными целыми числами).

В bash, для нормального массива ключи оценены как арифметические выражения. Как арифметическое выражение, string_0 оценивает к содержанию $string_0, и если это пусто, к 0. Таким образом, вышеупомянутое, вероятно, совпадет с:

klang=([0]='element_0' [0]='element_1' [0]='element_2')

Так, это совпадает с определением ${klang[0]} (который совпадает с $klang) 3 раза.

Это контрастирует с ksh93 массивы (который bash главным образом скопированный), где a=([x]=y) синтаксис только поддерживается для ассоциативных массивов и автоматически создал бы ассоциативный массив при использовании.

zsh ассоциативные массивы (которые предшествуют bash к десятилетиям), отличаются снова. zsh нормальные массивы являются нормальными массивами, zsh не поддерживает поддельное a=([x]=y) синтаксис. В zsh, необходимо объявить ассоциативные массивы прежде, чем определить их, и они определяются как:

normal_array=(val1 val2 val3)
typset -A associative_array
associative_array=(key1 val1 key2 val2)
associative_array+=(key3 val3...)

И $associative_array расходует к непустым значениям как для нормальных массивов (в неопределенном порядке), и "$associative_array[@]}" ко всем значениям как для нормальных массивов. ${(k)associative_array} для непустых ключей, "${(k@)associative_arrays}" для всех ключей, "${(kv@)associative_array}" для ключей и значений, таким образом, можно распечатать содержание ассоциативного массива с:

printf '%s => %s\n' "${(@kv)associative_array}"

Это также означает, что копирование ассоциативного массива является намного менее громоздким, чем с ksh93/bash:

typeset -A B
B=("${(kv@)A}")

в противоположность:

unset B
typeset -A B
for k in "${!A[@]}"; do B[$k]=${A[$k]}; done
2
07.12.2014, 20:51
2 ответа

Одним из способов переименовать файлы, которые имеют три цифры на четыре цифры, дополнены нулем. Если у вас есть PERL-RENAME (установлено по умолчанию на Ubuntu), вы можете попробовать:

rename -n 's/-(\d{3}\.)/-0$1/' *.pbm

Как только вы удовлетворены результатом, запустите снова без -N .

Или см. Другие варианты в прокладывают число в именем файле до фиксированной длины .

1
27.01.2020, 22:05

GNU sort и xargs могут сделать трюк

printf '%s\0' ullman*.pbm | sort -z -k2,2n -t'-' | xargs -0 convert 

Сначала проверьте эту работу, перечислив файлы без вызова convert

printf '%s\0' ullman*.pbm | sort -z -k2,2n -t'-' | xargs -0 printf '%s\n'
ullman-000.pbm
ullman-001.pbm
ullman-098.pbm
ullman-099.pbm
ullman-100.pbm
ullman-1000.pbm
...

Whileas

printf '%s\0' ullman*.pbm  | xargs -0 printf '%s\n'                                                              
ullman-000.pbm
ullman-001.pbm
ullman-098.pbm
ullman-099.pbm
ullman-1000.pbm
..
..
2
27.01.2020, 22:05

Теги

Похожие вопросы