Задать вопрос
@ivan_kholodov

Как получить распарсить и вернуть строку из функции bash?

Добрый день!
Соорентируйте пожалуйста, как написать функцию в bash, чтобы она принимала один аргумент, а внутри можно было этот аргумент (строку) распарсить и вернуть из неё число

к примеру:
function myFunc {
  return +arg.split('-', 2)
}

потом вызвать уже в блоке if при соответствующем условии myFunc $1

но в bash так не работает и не могу завести это дело.

код в if
elif [[ $1 == 'p-"${2}"' ]]; then
  ...прочий конфиг --mark myFunc $2


и далее запускаю эту команду из командной строки за флагом -- p-4
и мне нужно получить 4-ку чтобы обработать её в дальнейшем.

Заранее спасибо!
  • Вопрос задан
  • 424 просмотра
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
ох и запутанно вы объясняете, пол часа медитировал прежде чем примерно понять что вам нужно, хотя и то не уверен

как написать функцию в bash, чтобы она принимала один аргумент, а внутри можно было этот аргумент (строку) распарсить и вернуть из неё число

foo() {
	foo_arg1="$1"
	echo "$foo_arg1" | awk -F- '/^p-[[:digit:]]{1,}$/{printf $2}'
}
foo p-4 # вернет 4

сделал регуляркой с проверкой на число после p-

потом вызвать уже в блоке if при соответствующем условии myFunc $1
код в if
elif [[ $1 == 'p-"${2}"' ]]; then
  ...прочий конфиг --mark myFunc $2

во первых, 'p-"${2}"' это будет именно строка p-"${2}" а не p-чтототам, так как тут обрамлено в одинарные кавычки, правильнее было бы условие написать так:
[[ "$1" == "p-$2" ]]

то есть примерно будет такой скрипт:
#!/usr/bin/env bash

arg1="$1"
arg2="$2"

foo() {
	foo_arg1="$1"
	echo "$foo_arg1" | awk -F- '/^p-[[:digit:]]{1,}$/{printf $2}'
}

if [[ "$arg1" == "p-$arg2" ]]; then
	echo --mark $(foo $arg1)
fi
exit

допустим назовем скрипт 0.sh, тогда
./0.sh p-4 4
--mark 4
./0.sh p-4 5 # ничего не выведет так как p-4 неравно p-5
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
запускаю эту команду из командной строки за флагом -- p-4
и мне нужно получить 4-ку чтобы обработать её в дальнейшем.


как-нибудть так?:
#! /bin/bash

foo()
{
    RES="${1#p-}";
}

foo "$1"
echo "$RES"


из объяснений ничего непонятно.
Ответ написан
parse()
{
   # do something
   echo $1
}

a=`parse test1 test2`
echo $a
Ответ написан
Комментировать
hint000
@hint000
у админа три руки
echo $1 | awk -F- '$1=="p"{print $2}'
если $1 будет "p-4", то выведет 4
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы