Pull to refresh

Comments 5

Ещё один человек не знает, что переменные в 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.)

UFO just landed and posted this here
а еще в 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
В примере на Python токенизация нарушена, и он совершенно не для этого. Popen позволят организовать управление процессами. Таймауты, очереди и пр.

У вас же ничего этого не нужно, и пример на Python вполне может выглядеть как:
import os

all_threads = [1, 2, 4, 8, 16, 32, 64, 128]
all_runtimes = [os.popen('./pipeline --threads %s' % t).read() for t in all_threads]
Sign up to leave a comment.