fst является функцией одной переменной f, чтобы применить к строке s (fst будет одним из двух функций Vertmirror или Hormirror) пример на bash

Задание с Codewars https://www.codewars.com/kata/56dbe0e313c2f63be4000b25/train/shell Если я правильно понял - то что написано ниже должно пониматься так oper(fct, s) - смутило что аргументы в функцию тут прописаны в скобках - а это bash там так не передаются аргументы(наверное написано для разъяснения???)

где "fct" это функции которые я написал - $1 "s" это строка(и) для теста -$2

А вот мой "script"

#!/bin/bash

vertMirror() {
    vert_str=""
    str=$(echo "$2" | tr "," " ")
    for word in $str
    do
        rev_str=$(echo "${word}" | rev)
        vert_str+="${rev_str}\r"

    done
    echo "${vert_str%??}"
}


horMirror() {
    hor_st=""
    str=$(echo "$2" | tr "," " ")
    declare -a array
    array=($(echo ${str}))
    count=${#array[*]}  
    for ((i=count -1;i>=0;i--)); do
        hor_st+="${array[i]}\r"
    done
    echo "${hor_st%??}"

}

А вот тут не знаю как запустить весь скрипт - написал в oper() вот такие строки Ответ с сервера --- пустая строка Неправильно присваиваю в переменную функции??? Не знаю что нужно прописать в oper()

oper() {
   fct=$(vertMirror "$2") # vertMirror "$2"
   fct=$(horMirror "$2")  # horMirror "$2"
   
}
oper $1 $2

Подскажите пожайлуста "куда или как копать!!!!"


Ответы (1 шт):

Автор решения: Ivan

Насколько я понял, суть задания в том чтобы написать две функции, которые каким-то образом(по разному) преобразуют полученную строку. И написать еще одну функцию которая на основе аргументов, переданных скрипту выполнит ту или иную функцию. Упрощенно это пример выглядит так:

#!/bin/bash

# сохраняем аргументы скрипта в соотв. переменных
f=$1 #имя функции
s=$2 #строка для обработки

ver(){
    local data=$1 # сохраняем аргумент(1-й) функции в переменную data
    echo  "ver-$data"
}

hor(){
    local data=$1 # сохраняем аргумент(1-й) функции в переменную data
    echo  "hor-$data"
}

opt(){
    local   func=$1 # сохраняем 1-й аргумент функции в переменную func
    local   data=$2 # сохраняем 2-й аргумент функции в переменную data
    $func "$data"
}

opt $f "$s"

Ну и очевидно что функция opt избыточна, можно просто так:

#!/bin/bash

# сохраняем аргументы скрипта в соотв. переменных
f=$1 #имя функции
s=$2 #строка для обработки

ver(){
    local data=$1 # сохраняем аргумент(1-й) функции в переменную data 
    echo  "ver-$data"
}

hor(){
    local data=$1 # сохраняем аргумент(1-й) функции в переменную data
    echo  "hor-$data"
}

$f "$s"

Обратите внимание что переменные с данными(строка) обернуты в "". Т.к. данные могут содержать пробелы, а в названиях функций пробелы не допускаются. Тест:

$ ./test ver 123
ver-123

$ ./test hor 123
hor-123
→ Ссылка