Комментарии

Ещё один человек не знает, что переменные в bash нужно окружать кавычками. Сравните


a=( a "" b )
for e in ${a[@]} ; do
    echo \"$e\"
done

с


a=( a "" b )
for e in "${a[@]}" ; do
    echo \"$e\"
done

. Ну и кроме того, в bash в массиве можно хранить только строки. И вообще это единственный скалярный тип: сравните вывод


i=11-1
declare -i i
declare -p i

у bash и zsh (или ksh, кстати). В bash нет никаких скалярных типов, кроме строки, а declare не приводит к исполнению арифметических выражений уже имеющихся в переменной, поэтому это выведет declare -i i="11-1" — если бы переменная была бы типизирована, то такое было бы в принципе невозможно (впрочем, они могли бы притворится, что типизированные переменные у них есть, а реально всё равно хранить строки). В zsh же есть типы и строку поместить в целочисленную переменную не получится, поэтому declare не может не сконвертировать i в число, поэтому код выведет typeset -i i=10. (В ksh — declare -i i=10.)

НЛО прилетело и опубликовало эту надпись здесь
а еще в bash, кажется с 4, есть хэши. работа с ними выглядит забавно

#!/bin/bash

function print_animals() {
  local local_animals

  eval "declare -A local_animals="${1#*=}

  for sound in "${!local_animals[@]}" ; do
    echo "$sound - ${local_animals[$sound]}"
  done
}
declare -A animals
animals["moo"]="cow"
animals["woof"]="dog"

print_animals "$(declare -p animals)"


кмк, если у вас появились хэши и массивы в баше, то пара переходить на python/ruby

Как-то сложно Вы пишете. Я ничего не понял. Не смотря на свои знания.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.