]]> ]]>

Bash 3.0

Версия реализации bash языка программирования Unix shell

В Bash 3.0 были добавлены некоторые новые полезные функции: отладчик для bash-скриптов, подстановка численных значений введенных при помощи конструкции {x..y}, временные отметки в файле истории команд, улучшенный поиск с помощью регулярных выражений, поддерживающий синтаксис egrep и некоторые другие функции. Также было исправлено значительное количество ошибок и уязвимостей.

Примеры:

Факториал - Unix shell (3):

Используется рекурсивное определение факториала.

function factorial {
    typeset -i n=$1
    if [ $n = 0 ]; then
        echo 1
        return
    fi
    echo $(( n * $(factorial $(( n - 1 )) ) ))
}

for i in {0..16}
do
    echo "$i! = $(factorial $i)"
done

Hello, World! - Unix shell (253):

MESSAGE='Hello'
TARGET='World'

echo "$MESSAGE, $TARGET!"

Факториал - Unix shell (254):

Используется итеративное определение факториала.

f=1

for (( n=1; $n<=17; $((n++)) ));
do
  echo "$((n-1))! = $f"
  f=$((f*n))
done

Числа Фибоначчи - Unix shell (255):

Используется итеративное определение чисел Фибоначчи.

a=0
b=1
 
for (( n=1; $n<=16; n=$n+1 ));
do
  a=$(($a + $b))
  echo -n "$a, "
  b=$(($a - $b))
done
echo "..."

Hello, World! - Unix shell, Foma (368):

echo Hello, World!

Факториал - Unix shell (369):

Пример, работающий в версиях Unix shell, не поддерживающих синтаксис for i in {0..16} или ((i = 0; i <= 16; i++)): цикл for конструируется “вручную”.

В mksh используются 32-битовые целые числа, так что для факториалов чисел больше 13 в этой реализации происходит переполнение.

function factorial {
    typeset -i n=$1
    if [ $n = 0 ]; then
        echo 1
        return
    fi
    echo $(( n * $(factorial $(( n - 1 )) ) ))
}

i=0
while [[ $i -le 16 ]] 
do
    echo "$i! = $(factorial $i)"
    ((i++))
done

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам