В этом коде нет ничего (принципиально) неправильного, ваша проблема в том, что вы сбросили "IFS" где-то еще, вероятно, он пустой (поэтому вывод seq
рассматривается как одиночный токен).
Давно я не видел $ []
, он устарел (и недокументирован). Используйте $ (())
.
Вместо seq
используйте для (())
, а вместо добавления 1 используйте let var ++
, поэтому мы имеем:
for (( i1=1 ; i1<=5; i1++))
do
for ((k1=i1+1; k1<=5; k1++))
do
ky1="${team_two[i1]}_${team_two[k1]}"
let pair_score[$ky1]++
done
done
Поскольку вы вы используете недавний bash с ассоциативными массивами, можете также использовать и другие полезные функции: -)
Почему бы не использовать:
mv -- inputfile.png "$(shasum -a 256 -b inputfile.png | head -c8)"
Он переместит ваш файл на вывод $(shasum -a 256 -b inputfile.png | head -c8)
, т.е. первые 8 символов хеша.
Используйте подстановку команд для сохранения хеша в переменной оболочки:
file=inputfile.png
h=$(shasum -a 256 -b "$file" | head -c8)
Затем вы можете использовать его для переименования, печати на терминал, отправки на pbcopy
и т.д.
mv -- "$file" "$h"
echo "$h" | pbcopy
echo "'$file' renamed to '$h'"
Если вы хотите сохранить расширение файла, используйте что-то вроде этого:
newname=$h.${file##*.}
mv -- "$file" "$newname"
(${var##*.}
удаляет все до последней точки.)
Если вы хотите переименовать все файлы, используйте xargs. Это заклинание инструментов GNU, проверьте свои справочные страницы, чтобы увидеть, существуют ли соответствующие параметры.
printf "%s\0" * |
xargs -0 -I{} sh -c 'echo mv "$1" "$(shasum -a 256 -b "$1"| head -c8)"' sh {}
При этом нулевой байт используется для разделения имен файлов, что делает работу с именами файлов, содержащими пробелы, безопасной операцией.
Команда echo
должна быть удалена для фактического перемещения файлов.