LINUX.ORG.RU

Задачка для линуксоидов

 , ,


0

2
#!/bin/sh

# Пусть данный скрипт запущен под рутом.
# Вопрос на 5: что он напечатает?
# Вопрос на 4: почему он так печатает?
# Вопрос на 3: зачем было делать именно так?

show_all_arguments () {
    local a
    local i
    a="$#"
    i="1"
    while test "${i}" -le "${a}"
    do
        echo "\$${i} = \"$1\""
        i=$((${i}+1))
        shift
    done
}

test_dog () {
    echo "test dog1:"
    show_all_arguments $@

    echo "test dog2:"
    show_all_arguments "$@"

    echo "test dog3:"
    s="$@"
    show_all_arguments "${s}"

    echo "test dog4:"
    show_all_arguments "$@ d" "e"
}

test_dog "a b" "c"

задачка на 10 баллов - почему в тэгах написано bash, а вызывается /bin/sh

buratino ★★★★★
()

test_dog «a b» «c»
bash: test_dog: команда не найдена

pi11 ★★★★★
()

4ый вариант стремный

pftBest ★★★★
()

Посмотрел его предыдущие темы/комменты. Если он объявит себя в следующих темах хуестрадальцем и поедет в дефолт-сити к богатому дяденьке жить и работать за 3 копейки, значит, точно кто-то опять угоняет аккаунты.

justAmoment ★★★★★
()

Прикольно. Первые 3 — вполне очевидно. То, что в dog4 добавляется d к второму параметру было слегка неожиданно. Я думал, ещё один аргумент создастся.

Ответ на вопрос «почему» — «для удобства». Все типовые случаи, как нужно обрабатывать аргументы.

monk ★★★★★
()
Ответ на: комментарий от das_tier

Выполнил http://goo.gl/ovhKVt

test dog1:
$1 = "a"
$2 = "b"
$3 = "c"
test dog2:
$1 = "a b"
$2 = "c"
test dog3:
$1 = "a b c"
test dog4:
$1 = "a b"
$2 = "c d"
$3 = "e"
monk ★★★★★
()

Для BASH'а этот код просто ужасен.

Мсье хотя бы в курсе, что можно делать так:

declare -i count
count+=1
# Оно же: ((count++))
?

То есть ну я конечно понимаю, что в BASH нет floating-point, нет native multidimensional arrays или хотя бы (hard) variable references (symbolic references есть и отлично работают), на основе которых можно было бы строить multidimensional arrays'ы.

Но самые обычные конструкции типа «прибавить целое, вычесть целое, сравнить целое и целое» - BASH делает абсолютно нормальным образом,это не выглядит каким-то абсолютным уродством, как в приведённом Вами примере!

DRVTiny ★★★★★
()
Последнее исправление: DRVTiny (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.