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 шт):
Насколько я понял, суть задания в том чтобы написать две функции, которые каким-то образом(по разному) преобразуют полученную строку. И написать еще одну функцию которая на основе аргументов, переданных скрипту выполнит ту или иную функцию. Упрощенно это пример выглядит так:
#!/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